Uploaded by Barna Szakács

PYTHON-tudni-kell

advertisement
Tartalomjegyzék
PYTHON nyelvi alapjai ............................................................................................................. 3
Aritmetikai operátorok ........................................................................................................... 3
Kiíratás ................................................................................................................................... 3
Változók ................................................................................................................................. 3
Alapvető adattípusok .............................................................................................................. 4
Beépített adattípusok .............................................................................................................. 5
Az adattípus beállítása ........................................................................................................ 5
Az adott adattípus beállítása ............................................................................................... 5
Gyűjtő adattípusok ................................................................................................................. 6
Tuple................................................................................................................................... 6
Dictionary ........................................................................................................................... 7
Beolvasás, típuskonverziók .................................................................................................... 8
PYTHON vezérlési szerkezetek ................................................................................................. 9
Szelekció ................................................................................................................................ 9
Ismétléses vezérlés (Ciklusok)¶ ........................................................................................... 10
A while utasítás¶ .............................................................................................................. 10
A for utasítás .................................................................................................................... 11
PYTHON függvények .............................................................................................................. 14
Függvénydefiníció ................................................................................................................ 14
Függvényhívás¶ .................................................................................................................... 14
Default paraméterek ............................................................................................................. 14
Nevesített paraméterátadás ................................................................................................... 15
A None érték¶....................................................................................................................... 16
PYTHON stringek .................................................................................................................... 17
Stringek megadása................................................................................................................ 17
Stringek összefűzése ............................................................................................................ 17
Stringek hossza¶ ................................................................................................................... 17
Karakterek indexelése¶ ........................................................................................................ 17
String megfordítása .............................................................................................................. 19
Immutable adattípus¶ ........................................................................................................... 19
Részstring előfordulása¶ ...................................................................................................... 19
Stringkezelő függvények¶ .................................................................................................... 20
Beépített függvények ................................................................................................................ 21
Stringkezelő beépített függvények ....................................................................................... 21
Listakezelő beépített függvények ......................................................................................... 22
PYTHON nyelvi alapjai
Aritmetikai operátorok
Pythonban is használhatók a szokásos aritmetikai operátorok: + (összeadás), - (kivonás), *
(szorzás), / (osztás).
Itt is van az operátorok között egy precedencia (fontossági sorrend). Például a szorzás és
osztás "erősebb", mint az összeadás és kivonás. A műveletek végrehajtási sorrendjét szokásos
módon, zárójelekkel szabályozhatjuk.
Pythonban a / operátor minden esetben lebegőpontos osztást végez. Egészosztásra a //
operátort használhatjuk.
Maradékos osztásra a % operátort használjuk itt is. A ** operátorral hatványozást is
végezhetünk.
Kiíratás
Pythonban a print() beépített függvényt használjuk a konzolra való kiíratáshoz. A függvény
paramétereként megadjuk a kiírandó kifejezést (vagy kifejezéseket).
Változók
A változó átmeneti tárolóhely, amire a nevével hivatkozunk. A tárolóhely a Pythonban az első
használatkor automatikusan létrejön. Egészen addig elérhető, míg fut a program.
A val = 42 létrehozásánál nem adtuk meg expliciten a val változó típusát. Ennek az az oka,
hogy a Python értelmező automatikusan, dinamikusan "ki tudja találni" a változók típusát a
bennük tárolt érték alapján. Ezt úgy is mondjuk, hogy a Python egy dinamikusan típusos
nyelv.
A dinamikusan típusosság egyik érdekes következménye, hogy ugyanabban a változóban akár
eltérő típusú adatokat is tárolhatunk. A type() függvénnyel lekérdezhetjük egy változó típusát.
Alapvető adattípusok




bool: logikai adattípus - True vagy False értéke lehet (ezek a kulcsszavak mindketten
érzékenyek a kis- és nagybetűkre!)
int: egész szám
float: lebegőpontos ("valós") szám
str: szöveges adattípus, string
o megadás: idézőjelek vagy aposztrófok között
o a szokásos escape-szekvenciák itt is működnek
o összefűzés: + operátor
o többszörözés: * operátor
Beépített adattípusok
A változók különböző típusú adatokat tárolhatnak, és a különböző típusok is képesek
különböző dolgok.
A Python alapértelmezés szerint a következő beépített adattípusokkal rendelkezik ezekben a
kategóriákban:
Szöveg típusa:
Numerikus típusok:
Szekvencia típusok:
Leképezés típusa:
Készlettípusok:
Logikai típus:
Bináris típusok:
Nincs Típus:
str
int, , float complex
list, , tuplerange
dict
set, frozenset
bool
bytes, , bytearraymemoryview
NoneType
Az adattípus beállítása
A Pythonban az adattípus akkor van beállítva, amikor értéket rendel egy változóhoz:
Example
x = "Hello World"
x = 20
x = 20.5
x = 1j
x = ["apple", "banana", "cherry"]
x = ("apple", "banana", "cherry")
x = range(6)
x = {"name" : "John", "age" : 36}
x = {"apple", "banana", "cherry"}
x = frozenset({"apple", "banana", "cherry"})
x = True
x = b"Hello"
x = bytearray(5)
x = memoryview(bytes(5))
x = None
Data Type
str
int
float
complex
list
tuple
range
dict
set
frozenset
bool
bytes
bytearray
memoryview
NoneType
Az adott adattípus beállítása
Ha meg szeretnénk adni az adattípust, a következőket kell használni: Konstruktor
függvények:
Example
x = str("Hello World")
x = int(20)
Data Type
str
int
x = float(20.5)
x = complex(1j)
x = list(("apple", "banana", "cherry"))
x = tuple(("apple", "banana", "cherry"))
x = range(6)
x = dict(name="John", age=36)
x = set(("apple", "banana", "cherry"))
x = frozenset(("apple", "banana", "cherry"))
x = bool(5)
x = bytes(5)
x = bytearray(5)
x = memoryview(bytes(5))
float
complex
list
tuple
range
dict
set
frozenset
bool
bytes
bytearray
memoryview
Gyűjtő adattípusok
A Python programozási nyelvben négy gyűjtő adattípus létezik:
 A List egy rendezett és módosítható gyűjtemény. Engedélyezi a tagok duplikálását.
 A Tuple egy rendezett és megváltoztathatatlan gyűjtemény. Engedélyezi a tagok
duplikálását.
 A Set olyan gyűjtemény, amely rendezetlen, megváltoztathatatlan* és indexeletlen.
Nincsenek duplikált tagok.
 A Dictionary egy megrendelt gyűjtemény** és változékony. Nincsenek duplikált tagok.
Tuple
A rekordok több elem tárolására szolgálnak egyetlen változóban.
A Tuple egyike annak a 4 beépített adattípusnak a Pythonban, amelyet a adatok, a másik 3 a
List, Set és Dictionary, mindegyik különböző tulajdonságokkal és használattal.
A tuple egy olyan gyűjtemény, amely rendezett és megváltoztathatatlan.
A tuples kerek zárójelekkel van írva.
A rekordelemek rendezettek, megváltoztathatatlanok, és lehetővé teszik az ismétlődő
értékeket.
A rekordelemek indexelve vannak, az első elem indexelt, a második elem index ...[0][1]
A tuples megváltoztathatatlan, ami azt jelenti, hogy a rekord létrehozása után nem
módosíthatunk, nem adhatunk hozzá vagy távolíthatunk el elemeket.
Mivel a rekordok indexelve vannak, azonos értékű elemeket tartalmazhatnak:
Annak meghatározásához, hogy egy rekord hány elemmel rendelkezik, használja a függvényt:
len()
A beállított elemek megváltoztathatatlanok, de eltávolíthat és/vagy hozzáadhat elemeket amikor csak tetszik.
A Python 3.7-es verziójától kezdve a szótárak sorrendben vannak. A Python 3.6-os és korábbi verzióiban a
szótárak rendezetlenek.
*
**
Ha csak egy elemet tartalmazó rekordot szeretne létrehozni, vesszőt kell hozzáadnia az elem
után, különben a Python nem ismeri fel tuple-ként.
A rekordelemek bármilyen adattípusúak lehetnek. A rekordok különböző adattípusokat
tartalmazhatnak:
Beépített eljárások:
Method
Description
count()
Returns the number of times a specified value occurs in a tuple
index()
Searches the tuple for a specified value and returns the position of where it
was found
Dictionary
A szótárak az adatértékek key:value párokban való tárolására szolgálnak.
A szótár olyan gyűjtemény, amely rendezett, változtatható és nem megengedettek az
ismétlődések.
Az ismétlődő értékek felülírják a meglévő értékeket:
Annak meghatározásához, hogy egy szótár hány elemet tartalmaz, használjuk a függvényt:
len()
Method
clear()
copy()
fromkeys()
get()
items()
keys()
pop()
popitem()
setdefault()
update()
values()
Description
Removes all the elements from the dictionary
Returns a copy of the dictionary
Returns a dictionary with the specified keys and value
Returns the value of the specified key
Returns a list containing a tuple for each key value pair
Returns a list containing the dictionary's keys
Removes the element with the specified key
Removes the last inserted key-value pair
Returns the value of the specified key. If the key does not exist: insert
the key, with the specified value
Updates the dictionary with the specified key-value pairs
Returns a list of all the values in the dictionary
Beolvasás, típuskonverziók
Pythonban az input() függvénnyel olvashatunk be adatot a konzolról.
A függvény paramétereként megadható egy szöveg, ami az input beolvasásakor fog
megjelenni.
A függvény visszatér a beolvasott értékkel, így lementhetjük azt egy változóba.
Az input() függvény minden esetben egy stringet olvas be. Szükség esetén más típusra kell
konvertálnunk a beolvasott értéket!
A típuskonverziókhoz általában a következő függvényeket használjuk:
 int(): egész számra konvertálás
 float(): valós számra konvertálás
 str(): stringre konvertálás.
Figyeljünk arra, hogy Pythonban stringet csak stringgel lehet összefűzni! Ha az összefűzés
operátor valamelyik operandusa nem string típusú, akkor először szöveggé kell azt
alakítanunk az str() függvénnyel!
PYTHON vezérlési szerkezetek
Szelekció
Pythonban a szelekciós vezérlés megvalósítására az if, else és elif utasítások használatosak.
A feltételek megadásakor használható fontosabb feltételes és logikai operátorok:
Példa: Egy program, amely beolvas egy egész számot a standard inputról és kiírja, hogy az
pozitív, nulla vagy negatív
Példa: Logikai operátorok használata
Ismétléses vezérlés (Ciklusok)¶
Pythonban a while és for utasításokat tudjuk használni ismétléses vezérlés megvalósításra.
A while utasítás¶
A while utasítás a klasszikus kezdőfeltételes ismétléses vezérlést valósítja meg.
Szintaxisa:
Ciklus futásának befolyásolása:
 break: megszakítja az aktuális ismétlést és a szerkezetet követő utasításra ugrik
 continue: megszakítja az aktuális ismétlést és a következő iterációra ugrik
A for utasítás
Pythonban a for ciklus nem a klasszikus számlálásos ismétléses vezérlést valósítja meg.
Pythonban ugyanis úgynevezett listaszerű for ciklus van, ami egy elemsorozat bejárására
szolgál. Ekkor a ciklusváltozó rendre felveszi a bejárni kívánt elemsorozat összes értékét.
Nézzünk néhány példát a for utasítás használatára!
Szövegek bejárása
A fenti példában a bejárni kívánt elemsorozatunk egy szöveg ("alma"). A szöveg
karakterekből áll, ezeken a karaktereken iterálunk végig. A betu névre hallgató
ciklusváltozónk minden iterációban felveszi az aktuális karakter értékét, amit kiírunk a
konzolra.
Listák bejárása¶
A for ciklus egy másik gyakori használata a listák bejárása. A listákról egy későbbi
gyakorlaton tanulunk részletesebben, de tulajdonképpen tekinthetünk rájuk úgy, mint a
tömbökre - ők is elemek sorozatát tárolják.
A lista elemeinek bejárása hasonlóképpen történik, mint a szövegek karaktereinek bejárása.
Hagyományos for ciklus szimulálása¶
Felmerülhet bennünk a kérdés, hogy van-e lehetőségünk Pythonban a for ciklust a
"hagyományos" módon, számlálásos ismétléses vezérlésre használnunk. A válasz igen.
Ahhoz, hogy a klasszikus módon tudjuk használni a for ciklust, először egy számokból álló
elemsorozatot kell generálnunk, aminek az elemein végig fogunk iterálni.
A range(start, end, step) függvénnyel egyszerűen generálható ilyen számokból álló
elemsorozat. Ez a függvény legyártja nekünk az egész számokat start-tól end-ig (az end már
nincs benne az elemsorozatban), step lépésközzel.
A start, illetve step paraméterek elhagyhatók. Alapértelmezett módon 0-tól indulunk (start
alapértéke), és 1-esével lépkedünk (step alapértéke).
A step értékeként negatív számot is megadhatunk, ekkor "visszafelé lépkedünk".
Példa: Az egész számok kiíratása 0-tól 10-ig (a 10 már nincs benne)
Példa: Az egész számok kiíratása 1-től 100-ig, 3-as lépésközzel (a 100 már nincs benne)
Példa: Az egész számok kiíratása 20-tól 10-ig ("visszafelé lépkedés", a 10 már nincs benne)
Természetesen a for ciklusban is használhatjuk a break és continue utasításokat.
Példa: Elkezdjük kiíratni az 1 és 100 közötti egész számokat, majd 42-nél kilépünk
Példa: Kiíratjuk egy pizzafeltéteket tároló lista elemeit, viszont ha ananászt látunk, azt
átugorjuk (ízlés kérdése...)
PYTHON függvények
Függvénydefiníció
Pythonban is van lehetőségünk saját függvényeket definiálnunk, majd ezeket később
használnunk, meghívnunk.
A függvénydefiníció szintaxisa a következő (a szögletes zárójelek közötti részek
elhagyhatók):
Itt is használjuk a Python blokkszintaxist, és a függvény törzsét beljebb indentáljuk.
A függvényeink vissza is térhetnek valamilyen értékkel. Ezt a visszatérési értéket a return
kulcsszó után adhatjuk meg.
Függvényhívás¶
A függvények meghívásakor a szokásos szintaxist használjuk:
A függvényhívás során átadjuk a függvénynek a bemeneti paramétereket (feltéve ha a
kérdéses függvény vár paramétert).
Default paraméterek
Azonos nevű függvények esetén a kódban legkésőbb definiált függvény lesz hívható.
Mivel a fenti kódban két hello névre hallgató függvényünk is van, ezért ezek közül a
legutoljára definiált, 1 paramétert váró hello(nev) függvény lesz hívható. Ha a korábban
definiált, 0 paraméteres hello() függvényt próbáljuk meghívni, hibát kapunk.
A gyakorlatban viszont sokszor felmerül az igény arra, hogy egy függvényt akár eltérő
paraméterszámmal is meg tudjunk hívni. Szerencsére a Python biztosít erre egy megoldást,
mégpedig a default függvényparamétereket.
A default paraméterek lényege, hogy a függvény bizonyos paramétereinek alapértelmezett
értéket adunk a függvénydefiníció során. Ha a függvényhíváskor nem adjuk meg az adott
paraméter értékét, akkor az az alapértelmezett értéket veszi fel.
A fenti kódban először paraméter nélkül hívjuk meg a hello függvényt. Mivel a
paraméterváltozónknak nem adtunk át értékét, ezért az az alapértelmezett "Senki" szöveget
fogja felvenni. A második függvényhívásnál már megadtuk a paraméter értékét ("Béla"),
ebben az esetben természetesen ezt fogjuk használni a függvényen belül (nem a default
értéket).
A default paraméterek kapcsán van egy fontos szabály, amit be kell tartanunk: ha nem minden
függvényparaméternek adunk alapértelmezett értéket, akkor mindig az utolsó néhány
paraméternek kell default értéket adnunk (azaz a default paraméterek mindig a paraméterlista
jobb oldalán szerepelnek).
Nevesített paraméterátadás
Default paraméterek használata esetén lehetőségünk van nevesített paraméterátadásra is a
függvényhíváskor. Ekkor az elhagyható paraméterek közül expliciten megmondjuk, hogy
melyiknek az értékét akarjuk megadni (név=érték formában).
Ez alapvetően akkor lehet hasznos, ha nem olyan sorrendben szeretnénk megadni a
paramétereket, mint ahogy azok a függvény paraméterlistájában szerepelnek, vagy esetleg
valahány paraméter értékének megadását ki szeretnénk hagyni a függvényhíváskor.
A fenti példában a függvényhíváskor értéket adtunk az egyetlen kötelező paraméternek
(felhasznalonev), majd nevesített paraméterátadással a legutolsó (szak) paraméternek az
értékét állítottuk be. A középső (jelszo) paraméternek nem adtunk értéket, így az az
alapértelmezett None értéket veszi fel.
A None érték¶
A fenti példában szereplő None egy speciális beépített kulcsszó Pythonban. Ez az "üres
érték", amit más nyelvekben gyakran null-nak neveznek.
PYTHON stringek
Stringek megadása
A stringeket leggyakrabban aposztrófok ('...') vagy idézőjelek ("...") között szoktuk megadni.
A két megadási mód között lényegi különbség nincs.
Több soros szövegeket három darab idézőjel között adhatunk meg. Az így megadott szövegek
megőrzik a sortöréseket. Több soros, internetről kimásolt tartalmakat (pl. dalszövegeket) így
szoktunk megadni.
Stringek összefűzése
A stringek összefűzése a + (plusz) operátorral történik.
Stringek hossza¶
Pythonban a len() beépített függvény segítségével egyszerűen lekérdezhetjük egy tetszőleges
string hosszát (vagyis a szövegben szereplő karakterek számát).
A len() függvény egyébként nem csak stringek, hanem egyéb adattípusok (pl. lista, tuple,
dictionary) hosszát is le tudja kérdezni. A len()-nel még fogunk találkozni a későbbiek során.
Karakterek indexelése¶
Pythonban is van lehetőségünk a stringek karaktereinek az indexelésére. Erre a más
nyelvekből ismerős szögletes zárójel operátort használjuk: szoveg[index].
A karakterek indexelése itt is 0-tól kezdődik (tehát a legelső karakter indexe itt is 0 lesz).
A Python támogatja a negatív indexeket is. Ekkor a string végétől kezdünk el számolni (tehát
az utolsó karakter indexe -1, az utolsó előtti karakteré -2 stb.).
Ha Pythonban nem csak egyetlen karaktert, hanem egy komplett részstringet szeretnénk
lekérdezni, akkor használjuk az intervallumos indexelést.
A szoveg[index] konstrukcióban most index helyén egy intervallumot adhatunk meg,
mettől:meddig:lépésköz formában (a meddig indexű karakter már nem lesz benne a
kihasított részstringben). A három kettősponttal elválasztott érték közül bármelyik
tetszőlegesen elhagyható: alapból a 0. karaktertől megyünk az utolsó karakterig, 1-es
lépésközzel.
String megfordítása
Pythonban, ha egy stringet meg szeretnénk fordítani, akkor az intervallumos indexelést
felhasználva ezt egyszerűen megtehetjük: vesszük a teljes szöveget, csak most nem előrefelé,
hanem visszafelé lépkedve "olvassuk" azt (-1-es lépésköz).
Immutable adattípus¶
Pythonban minden string immutable. Ez azt jelenti, hogy a stringek kezdeti értéke nem
változhat meg. Tehát Pythonban például nem csinálhatunk olyat, hogy egy szöveg adott
karakterét módosítjuk. Ha ezt megpróbáljuk, hibaüzenetet kapunk.
Részstring előfordulása¶
Pythonban, ha le akarjuk ellenőrizni, hogy egy szöveg részstringként szerepel-e egy másik
szövegben, akkor ezt az in kulcsszóval egyszerűen meg tudjuk tenni.
Az s1 in s2 kifejezés igazat ad vissza, ha az s1 szöveg benne van az s2 szövegben.
Stringkezelő függvények¶
A Python rengeteg beépített stringkezelő függvényt biztosít. Ezek közül a legfontosabbakat:
 s.lower(): csupa kisbetűssé alakítja az s stringet
 s.upper(): csupa nagybetűssé alakítja az s stringet
 s.startswith(v): igazat ad vissza, ha az s string a v értékkel kezdődik
 s.endswith(v): igazat ad vissza, ha az s string a v értékre végződik
 s.count(v): visszaadja, hogy az s stringben hányszor szerepel a v érték
 s.strip(): eltávolítja az s string elején és végén lévő helyközöket
 s.lstrip(): csak az s string elején lévő helyközöket távolítja el (left strip)
 s.rstrip(): csak az s string végén lévő helyközöket távolítja el (right strip)
 s.replace(old, new): lecseréli az s stringben az összes old részstringet new-ra
 s.split(delim): feldarabolja az s stringet delim karakterek mentén (listát ad vissza)
 s.isalpha(): igazat ad vissza, ha az s stringben csak betűk szerepelnek
 s.isdigit(): igazat ad vissza, ha az s stringben csak számjegyek szerepelnek
 ...
Az átalakítást végző stringkezelő függvények (pl. lower(), upper(), replace()) az eredeti
stringet sosem módosítják (tudjuk, hogy a string egy immutable adattípus Pythonban), hanem
egy teljesen új szöveggel térnek vissza!
Formázott kiíratás¶
A formázott kiíratás segítségével egyszerűen és intuitíven megadhatók a behelyettesítendő
értékeket (pl. változókat) tartalmazó szövegek. Ekkor - a hagyományos stringösszefűzős
módszerrel ellentétben - nem kell megszakítanunk a szövegünk folytonosságát mindenféle
összefűzésekkel, valamint a típuskonverziókkal sem kell bajlódnunk.
Pythonban a szövegek formázott kiíratására többféle módszert is használhatunk:
format() metódus
%-formatting
f-stringek (Python 3.6-tól).
Beépített függvények
Stringkezelő beépített függvények
Method
capitalize()
casefold()
center()
count()
encode()
endswith()
expandtabs()
find()
format()
format_map()
index()
isalnum()
isalpha()
isdecimal()
isdigit()
isidentifier()
islower()
isnumeric()
isprintable()
isspace()
istitle()
isupper()
join()
ljust()
lower()
lstrip()
maketrans()
partition()
replace()
rfind()
rindex()
rjust()
rpartition()
rsplit()
rstrip()
split()
splitlines()
startswith()
Description
Converts the first character to upper case
Converts string into lower case
Returns a centered string
Returns the number of times a specified value occurs in a string
Returns an encoded version of the string
Returns true if the string ends with the specified value
Sets the tab size of the string
Searches the string for a specified value and returns the position of
where it was found
Formats specified values in a string
Formats specified values in a string
Searches the string for a specified value and returns the position of
where it was found
Returns True if all characters in the string are alphanumeric
Returns True if all characters in the string are in the alphabet
Returns True if all characters in the string are decimals
Returns True if all characters in the string are digits
Returns True if the string is an identifier
Returns True if all characters in the string are lower case
Returns True if all characters in the string are numeric
Returns True if all characters in the string are printable
Returns True if all characters in the string are whitespaces
Returns True if the string follows the rules of a title
Returns True if all characters in the string are upper case
Joins the elements of an iterable to the end of the string
Returns a left justified version of the string
Converts a string into lower case
Returns a left trim version of the string
Returns a translation table to be used in translations
Returns a tuple where the string is parted into three parts
Returns a string where a specified value is replaced with a specified
value
Searches the string for a specified value and returns the last position of
where it was found
Searches the string for a specified value and returns the last position of
where it was found
Returns a right justified version of the string
Returns a tuple where the string is parted into three parts
Splits the string at the specified separator, and returns a list
Returns a right trim version of the string
Splits the string at the specified separator, and returns a list
Splits the string at line breaks and returns a list
Returns true if the string starts with the specified value
strip()
swapcase()
title()
translate()
upper()
zfill()
Returns a trimmed version of the string
Swaps cases, lower case becomes upper case and vice versa
Converts the first character of each word to upper case
Returns a translated string
Converts a string into upper case
Fills the string with a specified number of 0 values at the beginning
Listakezelő beépített függvények
Method
append()
clear()
copy()
count()
extend()
index()
insert()
pop()
remove()
reverse()
sort()
Description
Adds an element at the end of the list
Removes all the elements from the list
Returns a copy of the list
Returns the number of elements with the specified value
Add the elements of a list (or any iterable), to the end of the current list
Returns the index of the first element with the specified value
Adds an element at the specified position
Removes the element at the specified position
Removes the item with the specified value
Reverses the order of the list
Sorts the list
Download