Kihagyás

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
tobb_soros_szoveg = """Egy, egy almafa
Kettő, két katica
Három, három kiskacsa
Egy, kettő, három"""

Stringek összefűzése

A stringek összefűzése a + (plusz) operátorral történik.

1
2
szoveg = "szkript" + "nyelvek"
print(szoveg)   

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
szoveg = str(101) + " kiskutya"
print(szoveg)       

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
szoveg = "Python"
print(len(szoveg))

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
szoveg = "macskajancsi"
print("A 0. indexű karakter:", szoveg[0])   
print("A 4. indexű karakter:", szoveg[4])   

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
szoveg = "macskajancsi"
print("Az utolsó karakter:", szoveg[-1])

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
szoveg = "macskajancsi"

print("4-10. karakter, 2-es lépésközzel:", szoveg[4:10:2])  
print("2-5. karakter:", szoveg[2:5])
print("Elejétől a 6. karakterig:", szoveg[:6])
print("6. karaktertől a string végéig:", szoveg[6:])
print("A teljes szöveg:", szoveg[:])
print("Minden második karakter:", szoveg[::2])

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
szoveg = "macskajancsi"                     
print(szoveg[::-1])                 

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
szoveg = "Jaj, erre figyelni kell!"
szoveg[1] = 'u'

print(szoveg)

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
szoveg = "1, egy almafa; 2, két katica; 3, három kiskacsa; 1, 2, 3"

if "alma" in szoveg:
    print("Van a szövegben alma.")

if szoveg[0] in "0123456789":
    print("A szöveg egy számjeggyel kezdődik.")

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 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!

Példa: Stringkezelő függvények használata

1
2
3
4
5
6
7
8
9
szoveg = "   A füstölt szalonna a legjobb szalonna Béla szerint                "
szoveg = szoveg.strip()   # helyközök eltávolítása a szöveg elejéről és végéről

print(szoveg.lower())               # kisbetűsítés
print(szoveg.upper())               # nagybetűsítés
print(szoveg.endswith("szerint"))   # a "szerint" stringre végződik-e a szöveg
print(szoveg.count("a"))            # hány darab 'a' betű van a szövegben
print(szoveg.replace("szalonna", "kolbász"))  # lecserélés
print(szoveg.split(" "))            # feldarabolás szóközök mentén

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
PI = 3.14159265359
print("A pí értéke: {}".format(PI))                   # format() metódus

nev = "Béla"
eletkor = 21
print("Hello, %s vagyok, %d éves." % (nev, eletkor))  # %-formatting

elet_ertelme = 42
print(f"Az élet értelme: {elet_ertelme}")             # f-string

Kimenet

A pí értéke: 3.14159265359 Hello, Béla vagyok, 21 éves. Az élet értelme: 42

Feladatok

  1. 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
    
  2. 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
    
  3. Készíts egy programot, ami az alábbi fordított piramist írja ki!

    1
    2
    3
    4
    5
    * * * * *
    * * * *
    * * *
    * *
    *
    
  4. 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.


Utolsó frissítés: 2021-09-13 14:05:13