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 boolLogikai 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.