Az előadás nagyvonalakban a hivatalos Python tutorial 3.7-et követi, de lehet használni a w3schools tutorial-ját is.
A Python egy olyan általános körben használható magas szintű programozási nyelv, aminek az egyik alapelve az olvasható kód írása egy nagyon tiszta szintaxis használatával. 1991-ben alkotta meg Guido Van Rossum.
Nevét a Monthy Python ihlette, nem az állat.
python
ú.n. interpretált (interpreteres) nyelv (Interpretált nyelv végrehajtja az utasításokat anélkül, hogy közvetlenül gépi kódra fordítaná azt – ellentétben a fordítóprogramos nyelvekkel) Több módon is futtathatunk python kódot.
Parancssorból futtatható, a Python interaktív interpretere:
$ python
Ez egy saját prompt-ot ad, ahová közvetlenül írhatunk Python-kódot.
De lefuttathatunk parancssorból egy létező python file-t is (.py kiterjesztésű file):
$ python hello.py
Ekkor lefut a program és ha van szöveges kimenete a programnak az látható lesz a parancssorban.
Itt az interpreter a python
(.exe
)
A Jupyter egy böngészőn keresztül használható fejlesztői környezet, többek közöt python-hoz. Ezt lehet saját gépről is használni (ha telepítve van), de gyakorlaton a jupyter.math.bme.hu-t fogjuk használni. Ez ugyan olyan, mintha a saját gépről kiadnánk a jupyter notebook
parancsot.
A Jupyter maga egy webes felhasználói felület, a háttérben Python (és akár Sage, R vagy más) interpretert ( kernel ) futtat.
Az Anaconda disztribúciót javaslom. Van minden főbb asztali oprendszerre (Linux, Mac, Windows)
Ez nagyon sok mindent tartalmaz, pl. parancssori (python
, ipython
), notebook (jupyter
) és grafikus (Spyder
) környezetet, statisztikai programnyelvet (R), és sok hasznos függvénykönytárat.
Az objektumok a nyelv alapelemei, ezekkel fogunk dolgozni. Minden objektumnak van típusa. A következő típusokkal kezdjük:
int
(egész): 2354, -12float
(lebegőpontos szám): 1.0, -23.567, 2.3E4bool
(logikai): True, Falsestr
(karakterlánc, sztring): "Pál fogyó IQ-jú kun exvő, ím dühös a WC-bűzért.", "öt hűtőházból kértünk színhúst", "ハンガリーからのご挨拶", "هنغاريا", "Венгрия", "헝가리", "הונגריה", "匈牙利", "ฮังการี",Dolgok típusát lekérdezhetjük a type
paranccsal.
type(5.0)
Az objektumok műveletekkel összekapcsolva kifejezéseket adnak, melyek kiértékelve valamilyen típusú objektumot adnak. Az egész és a lebegőpontos műveletek:
a + b
összeadása - b
kivonása * b
szorzása / b
osztás (Python 2.7-ben int/int = int, Python 3-tól float)a // b
egész osztása % b
maradékképzésa ** b
hatványozás (NEM a ^ b
, mint a sage-ben!)a == b, a < b, a > b, a <= b, a >= b, a != b
eredményük bool
Logikai műveletek bool-típusúak közt:
a and b
, „és”a or b
, „megengedő vagy” not a
, „nem”a != b
, „kizáró vagy” (exclusive or, xor)Stringeken alapvető műveletek:
a + b
, konkatenálása in b
, tartalmazás vizsgálat (eredménye bool)5 + 11
2 ** 251
12 ^ 7 # bitenkénti kizáró vagy: 1100 ^ 0111 = 1011
a = 54
b = a - 50
a * b
54 > 12
b <= 0
54 > 12 or b <= 0
(1 < 2) != (3 == 3) # != exclusive or
(1 < 2) != (3 == 3)
s = "ハンガリー"
"ハン" in s
s = "hon"
s = 'Pyt' + s
s
Három módon adhatunk meg karakterláncokat:
s = "kiskutya"
type(s)
s = 'kiskutya'
type(s)
s = """Volt egyszer egy kiskutya.
Elment a vásárba."""
type(s)
s
Itt a vezérlő karaketerek (\n a sorvége jel), a print utasítás a vezérlő karaktereket is megjeleníti:
print(s)
Az első kettőnek kényelmi szerepe van, mert amelyik idézőjelet nem használjuk a string jelzésére azt használhatjuk a stringben. Például:
print("Egy 'macskaköröm', " + 'kettő "macskaköröm".')
sztring = 'Van ilyen: \', meg ilyen: ".'
sztring
print(sztring)
A harmadik változatban használhatunk sortörést és ez a stringben is sortörésként fog megjelenni. Míg a többi jelöléssel sortörést a \n
kifejezéssel tudunk tenni.
További speciális (ún. escape) karakterek stringekben: \\\\ (\\), \\\' ('), \\\" ("), \n
(új sor), \t
(tab)
print("""első sor,
második sor""")
print("\home\name")
print(r"\home\name") # raw text, no escape sequences
Interaktív módban (akár parancssori, akár itt a Jupyterben) az egyes cellák eredménye az utolsó érték ami kiértékelődött, de ha futtatunk egy korábban megírt python programot, akkor csak az lesz kiírva, amit meg akarunk jeleníteni (pl. a print()
függvénnyel.)
5 + 8
5 + 7
a = 5
print(a)
a = 15
a + 1
print(a * 2)
a
print("Volt egyszer egy %s, elment a vásárba." % "nagykutya")
Ha egy stringben %s
szerepel akkor utána %
jellel behelyettesíthetünk erre a pozícióra egy másik stringet. Több behelyettesítés esetén:
print("Volt %s egy %s, elment a %s." % ("egyszer", "kiskutya", "vásárba"))
Nem csak stringeket lehet behelyettesíteni, egész vagy lebegőpontos számokat is lehet:
print("""A %d egy decimális egész (integer),
a %f pedig egy lebegőpontos (floating point) szám.""" % (23, 1.0/3))
% |
típus | példa | eredmény |
---|---|---|---|
%s |
sztring | "Volt egyszer egy %s" % "kiscica" |
"Volt egyszer egy kiscica" |
%d |
egész | "Volt egyszer %d kiscica" % 1 |
"Volt egyszer 1 kiscica" |
%f |
lebegőpontos | "Volt egyszer %f kiscica" % math.pi |
"Volt egyszer 3.141593 kiscica" |
"Volt egyszer %d %s és osztozniuk kellett %fdkg sajton" % (3, 'kisegér', math.pi) |
"Volt egyszer 3 kisegegér és osztozniuk kellett 3.141593dkg sajton" |
Az hogy mi történjen a sor végén, az end=
opcióval adható meg. Értéke alapértelmezésben '\n'
. Egy üres print
egyszerűen új sort kezd.
print(1, 3.14, "kutya")
print("macska", end=' ') # egy szóköz
print("teve", end='') # üres string
print("gel", end=' ')
print()
print("vége")
input()
nev = input("Hogy hívnak? ")
print("Szia %s!\nÖrülök, hogy megismerkedtünk!" % nev)
input() > 10 # amit beolvas, az string
int(input()) > 10 # konvertáljuk egésszé
type(input())
x = float(input())
if x < 0:
print("ez negatív")
elif x == 0:
print("ez nulla")
elif x == 1:
print("ez egy")
else:
print("ez sok")
Az elif
-ek száma tetszőleges, de se az elif
se az else
megadása nem kötelező.
Ha az eredeti feltétel teljesül (igazra értékelődik), akkor az ő blokkjába eső (alatta behúzott) kód fut le, ha nem teljesül akkor az első olyan elif
blokk fut le aminek a feltétele igaz, ha ezek se igazak akkor az else
ág blokkja fut le, feltéve hogy van.
A behúzás (indentálás) legelterjedtebb mértéke a négy szóköz.
n = 1000
a = 1
while a ** 3 <= n:
print(a ** 3, end=' ')
a = a + 1
print("vége")
A while
ciklus blokkja újra és újra lefut, amíg teljesül a ciklus feltétele.
Ciklusokat és elágazásokat egymásba ágyazhatunk:
A híres Collatz- vagy $3x+1$-probléma:
a = int(input())
while a != 1:
print(a, end=' ')
if a % 2 == 0:
a = a // 2
else:
a = a * 3 + 1
print(a)
Ezt megtehetjük akárhány mélységig (ciklusok is ágyazhatók egymásba):
a = int(input())
if a > 0:
while a != 1:
print(a, end=' ')
if a % 2 == 0:
a = a // 2
else:
a = a * 3 + 1
print(a)
else:
print("Pozitív egész számot adjunk meg!")
A fenti kód már azt is teszteli, hogy a felhasználó pozitív egész számot adott-e meg. Változtassunk a kódon úgy, hogy többször egymás után is lefusson, és 0 érték megadása esetén álljon le! Ehhez a break
parancsot használhatjuk, mellyel kiugorunk a ciklusból!
while True:
a = int(input())
if a > 0:
while a != 1:
print(a, end=' ')
if a % 2 == 0:
a = a // 2
else:
a = a * 3 + 1
print(a)
elif a == 0:
break
else:
print("Nemnegatív egész számot adjunk meg, a 0-val befejezzük a futtatást!")
Ha több ciklus van egymásba ágyazva, akkor a legbelső ciklusból ugrik ki, melynek blokkjában van.