Az előadás nagyvonalakban a hivatalos Python tutorial 3.7-et, illetve 3.8-at követi, de lehet használni a w3schools tutorial-ját is (amiben online gyakorlatok és tesztek is vannak).
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:
$ python3
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):
$ python3 hello.py
Ekkor lefut a program és ha van szöveges kimenete a programnak az látható lesz a parancssorban.
Windows:
C:\Users\YourName> py
or maybe instead of py
you may write python(.exe)
.
C:\Users\YourName> py Desktop\hello.py
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 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 ** 2514
12 ^ 7 # bitenkénti kizáró vagy (XOR): 1100 ^ 0111 = 1011
# csak az érdekesség kedvéért bitenkénti OR és AND:
12 | 7, 12 & 7
a = 14
b = a - 10
a * b
54 > 12
b <= 0
54 > 12 or b <= 0
54 > 12 and b <= 0
(1 < 2) != (3 == 3) # != exclusive or
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("'Egyik' és " + '"másik" idézőjel.')
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
Sorbeli (inline) megjegyzés #
-jellel, többsoros megjegyzésre a """-es karakterlánc használható, mivel bármely karakterlánc megjegyzés, ha csak önmagában áll (nem értékadásban).
1 + 1 # my first Python command
"""The next code
is really
very simple:"""
1 + 2
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 vásárba." % ("egyszer", "kiskutya"))
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))
"%s! Megkaptad a %d pontot!" % ("Tomi", 100)
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")
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 a szám")
print("negatív")
elif x == 0:
print("nulla")
elif x == 1:
print("egy")
else:
print("pozitív, de nem egy")
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.
if x >= 10 or x <=-10:
print("legalább kétjegyű a szám")
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 $3n+1$-probléma (megoldatlan):
n = int(input())
while n != 1:
print(n, end=' ')
if n % 2 == 0:
n = n // 2
else:
n = n * 3 + 1
print(n)
Ezt megtehetjük akárhány mélységig (ciklusok is ágyazhatók egymásba):
n = int(input())
if n > 0:
while n != 1:
print(n, end=' ')
if n % 2 == 0:
n = n // 2
else:
n = n * 3 + 1
print(n)
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:
n = int(input())
if n > 0:
while n != 1:
print(n, end=' ')
if n % 2 == 0:
n = n // 2
else:
n = n * 3 + 1
print(n)
elif n == 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 break
a legbelső ciklusból ugrik ki, melynek blokkjában van.