Stringek¶
Pythonban a stringek tetszőlegesen hosszú karaktersorozatok, szövegek.
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.
1 2 3 4 |
|
Stringek összefűzése¶
A stringek összefűzése a +
(plusz) operátorral történik.
1 2 |
|
Kimenet
szkriptnyelvek
Ne feledjük, hogy Pythonban stringet csak stringgel lehet összefűzni. A nem szöveges típusú adatokat először stringgé kell alakítanunk az str()
függvénnyel.
1 2 |
|
Kimenet
101 kiskutya
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).
1 2 |
|
Kimenet
6
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).
1 2 3 |
|
Kimenet
A 0. indexű karakter: m A 4. indexű karakter: k
Egy kis érdekesség, hogy 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.).
1 2 |
|
Kimenet
Az utolsó karakter: i
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.
1 2 3 4 5 6 7 8 |
|
Kimenet
4-10. karakter, 2-es lépésközzel: kjn 2-5. karakter: csk Elejétől a 6. karakterig: macska 6. karaktertől a string végéig: jancsi A teljes szöveg: macskajancsi Minden második karakter: mckjns
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).
1 2 |
|
Kimenet
iscnajakscam
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.
1 2 3 4 |
|
Kimenet
Traceback (most recent call last): File "main.py", line 2, in <module> szoveg[1] = 'u' TypeError: 'str' object does not support item assignment
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.
Példa: Az in
operátor használata
1 2 3 4 5 6 7 |
|
Kimenet
Van a szövegben alma. A szöveg egy számjeggyel kezdődik.
Stringkezelő függvények¶
A Python rengeteg beépített stringkezelő függvényt biztosít számunkra. Ezek közül áttekintjük a kurzus szempontjából a legfontosabbakat.
s.lower()
: csupa kisbetűssé alakítja azs
stringets.upper()
: csupa nagybetűssé alakítja azs
stringets.startswith(v)
: igazat ad vissza, ha azs
string av
értékkel kezdődiks.endswith(v)
: igazat ad vissza, ha azs
string av
értékre végződiks.count(v)
: visszaadja, hogy azs
stringben hányszor szerepel av
értéks.strip()
: eltávolítja azs
string elején és végén lévő helyközökets.lstrip()
: csak azs
string elején lévő helyközöket távolítja el (left strip)s.rstrip()
: csak azs
string végén lévő helyközöket távolítja el (right strip)
s.replace(old, new)
: lecseréli azs
stringben az összesold
részstringetnew
-ras.split(delim)
: feldarabolja azs
stringetdelim
karakterek mentén (listát ad vissza)s.isalpha()
: igazat ad vissza, ha azs
stringben csak betűk szerepelneks.isdigit()
: igazat ad vissza, ha azs
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!
Példa: Stringkezelő függvények használata
1 2 3 4 5 6 7 8 9 |
|
Kimenet
a füstölt szalonna a legjobb szalonna béla szerint A FÜSTÖLT SZALONNA A LEGJOBB SZALONNA BÉLA SZERINT True 6 A füstölt kolbász a legjobb kolbász Béla szerint ['A', 'füstölt', 'szalonna', 'a', 'legjobb', 'szalonna', 'Béla', 'szerint']
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).
Nézzünk egy-egy példát ezek mindegyikére!
1 2 3 4 5 6 7 8 9 |
|
Kimenet
A pí értéke: 3.14159265359 Hello, Béla vagyok, 21 éves. Az élet értelme: 42
Feladatok¶
-
Készíts egy
piramis
nevű függvényt, ami egy számot vár, és alábbi piramist rajzolja ki (mindig az aktuális számig, az még legyen benne a kiíratásban)!1 2 3 4 5
1 2 2 3 3 3 4 4 4 4 5 5 5 5 5
-
Készíts egy
szorzotabla
nevű függvényt, ami kiírja a szorzótáblát 1-től 10-ig!1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 2 4 6 8 10 12 14 16 18 20 3 6 9 12 15 18 21 24 27 30 4 8 12 16 20 24 28 32 36 40 5 10 15 20 25 30 35 40 45 50 6 12 18 24 30 36 42 48 54 60 7 14 21 28 35 42 49 56 63 70 8 16 24 32 40 48 56 64 72 80 9 18 27 36 45 54 63 72 81 90 10 20 30 40 50 60 70 80 90 100
-
Készíts egy programot, ami az alábbi fordított piramist írja ki!
1 2 3 4 5
* * * * * * * * * * * * * * *
-
Készíts egy programot, ami bekér 3 számot, és a három szám alapján kiírja a felhasználónak, hogy a megadott három szám
- számtani sorozatot alkot-e,
- mértani sorozatot alkot-e,
- nem alkot sem számtani, sem mértani sorozatot!
További gyakorló feladatok megoldással itt és itt.