Kihagyás

Szerkesztés alatt!

Az oldal további része szerkesztés alatt áll, a tartalma minden további értesítés nélkül többször, gyakran, jelentősen megváltozhat!

Sztringek, sztringbejárás

Tartalom

A Python str adattípusa, indexek, szeletek. A for utasítás, sztring bejárása for segítségével. Feladatmegoldások sztringek és sztringbejárás segítségével.

Az str típus alapjai

Mi az a sztring?

A sztring (string, rövidítve: str) karakterek sorozata. Bármilyen szöveget tartalmazhat: betűket, számokat, szóközöket, írásjeleket. Pythonban a sztringeket idézőjelek között adjuk meg.

Kétféle idézőjel használható:

1
2
3
4
5
6
7
# Egyszeres idézőjel
nev = 'Anna'
varos = 'Budapest'

# Dupla idézőjel
uzenet = "Helló Világ!"
mondat = "Ez is egy sztring."

Mindkettő egyenértékű! A kettő közötti választás gyakran attól függ, hogy milyen karaktereket szeretnénk a sztringben használni:

1
2
3
4
5
# Ha aposztróf van a szövegben, dupla idézőjelet használunk
mondat1 = "Becs'szóra ez Anna könyve!"

# Ha idézőjel van a szövegben, egyszeres idézőjelet használunk
mondat2 = 'Azt mondta: "Helló!"'

Sztringek összefűzése és ismétlése

1
2
3
4
5
6
7
8
9
# Összefűzés (konkatenáció) + operátorral
keresztnev = "Anna"
vezeteknev = "Kovács"
teljes_nev = vezeteknev + " " + keresztnev
print(teljes_nev)  # "Kovács Anna"

# Ismétlés * operátorral
print("ha" * 3)  # "hahaha"
print("-" * 20)  # "--------------------"

Indexelés sztringen

Az indexelés lehetővé teszi, hogy egy sztring egyetlen karakterét közvetlenül elérjük, anélkül hogy végigmennénk az összes karakteren.

Alapfogalmak:

  • A karakterek 0-tól kezdődnek számozódni (nem 1-től!)
  • Az utolsó karakter indexe: len(sztring) - 1
  • Használhatunk negatív indexeket is, amelyek a végéről számolnak

Pozitív indexelés

1
2
3
4
5
6
7
8
9
szoveg = "Python"

print(szoveg[0])  # "P" - első karakter
print(szoveg[1])  # "y" - második karakter
print(szoveg[2])  # "t" - harmadik karakter
print(szoveg[3])  # "h"
print(szoveg[4])  # "o"
print(szoveg[5])  # "n" - utolsó karakter
# print(szoveg[6])  # HIBA! Nincs ilyen index
Indexelés
1
2
Sztring:    P    y    t    h    o    n
Index:      0    1    2    3    4    5

A sztring hossza 6, de az utolsó index 5!

Negatív indexelés

A negatív indexek a sztring végéről számolnak visszafelé. Ez nagyon hasznos, amikor az utolsó karaktereket szeretnénk elérni.

1
2
3
4
5
6
7
8
szoveg = "Python"

print(szoveg[-1])  # "n" - utolsó karakter
print(szoveg[-2])  # "o" - utolsó előtti
print(szoveg[-3])  # "h"
print(szoveg[-4])  # "t"
print(szoveg[-5])  # "y"
print(szoveg[-6])  # "P" - első karakter
Indexelés
1
2
3
Sztring:    P    y    t    h    o    n
Pozitív:    0    1    2    3    4    5
Negatív:   -6   -5   -4   -3   -2   -1

Miért hasznos a negatív index?

Sokszor nem tudjuk előre, hogy egy sztring milyen hosszú. Az utolsó karakter mindig [-1], függetlenül a hossztól!

1
2
3
4
5
6
7
8
9
nev1 = "Anna"
nev2 = "Borbála"

print(nev1[-1])  # "a"
print(nev2[-1])  # "a"

# Pozitív indexszel:
print(nev1[3])   # "a"
print(nev2[6])   # "a" - de ezt előre tudnunk kellene!

Megváltozhatatlanság

A sztringek megváltozhatatlanok (immutable) Pythonban. Ez azt jelenti, hogy ha egyszer létrehoztunk egy sztringet, az eredeti értékét nem tudjuk módosítani. Új sztringet kell létrehozni helyette.

1
2
3
4
5
szoveg = "hello"
# szoveg[0] = "H"  # Ez HIBÁT okoz!

# Helyette új sztringet kell létrehozni:
szoveg = "Hello"  # Ez működik

Sztring slice (szeletelés)

A slice segítségével egy sztring egy részét kaphatjuk meg. Nem csak egy karaktert, hanem egy részsztringet (substring).

A részsztring valójában nem az eredeti sztring egy része.

A részsztring technikailag egy új sztring lesz, amelynek az értéke megegyezik a meghatározott részsztring értékével, és nem az eredeti sztring egy tényleges részét kapjuk vissza; bár a Python sztringeknél ezzel nem kell foglalkoznunk.

1
sztring[start:stop:step]
  • start: Melyik indextől kezdjük (ez a karakter benne lesz az eredményben)? Elhagyható, alapértelmezése 0 (a sztring legelejétől indulunk).
  • stop: Melyik index előtt állunk meg (ez a karakter nem lesz benne az eredményben)? Elhagyható, alapértelmezése a sztring hossza (a szting legvégéig megyünk).
  • step: Mekkora lépésközzel haladunk (minden hányadik karaktert szeretnénk az eredményben látni)? Elhagyható, alapértelmezése 1 (a megadott index-intervallum minden karakterét).
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
szoveg = "Programozás"

# Első 7 karakter (0-tól 7-ig, de 7 nincs benne)
print(szoveg[0:7])   # "Program"

# Ha 0-tól kezdjük, a 0 elhagyható
print(szoveg[:7])    # "Program"

# 7. indextől a végéig
print(szoveg[7:])    # "ozás"

# A teljes sztring
print(szoveg[:])     # "Programozás"

Részletes magyarázat - hogyan működik a stop?

A stop index karakter nincs benne az eredményben!

1
2
3
4
5
6
7
8
szoveg = "Python"
#         012345  indexek

print(szoveg[0:3])  # "Pyt"
# Magyarázat: 0,1,2 indexű karakterek (0,1,2) - a 3-as nincs benne!

print(szoveg[2:5])  # "tho"
# Magyarázat: 2,3,4 indexű karakterek - az 5-ös nincs benne!

Sztring részek kivágása

[start:stop] jelentése: "start-tól egészen stop előttig

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
szoveg = "Programozás"
#         01234567890  indexek

# 2. indextől az 5. indexig (5 nincs benne)
print(szoveg[2:5])   # "ogr"

# 3. indextől a 8. indexig
print(szoveg[3:8])   # "gramo"

# 1. indextől a 10. indexig
print(szoveg[1:10])  # "rogramoz"

Negatív indexekkel

A szeletelésnél a start és stop indexek megadására negatív indexek is használhatók, akár pozitív indexekkel kombinálva is.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
szoveg = "Programozás"

# Utolsó 4 karakter
print(szoveg[-4:])   # "ozás"

# Első karakterektől az utolsó 4 előttig
print(szoveg[:-4])   # "Program"

# -8-tól -2-ig
print(szoveg[-8:-2]) # "gramoz"

# -8-tól 8-ig
print(szoveg[-8:-2]) # "gram"

# 4-től -4-ig
print(szoveg[4:-4]) # "ram"

Step (lépésköz) használata

A lépésköz megadja, hogy az adott intervallumból minden hányadik karakter szerepeljen az eredményben.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
szoveg = "Programozás"

# Minden karakter (lépésköz 1 - ez az alapértelmezett)
print(szoveg[::1])   # "Programozás"

# Minden második karakter
print(szoveg[::2])   # "Pormzs"

# Minden harmadik karakter
print(szoveg[::3])   # "Pgms"

# Csak a páros indexű karakterek
print(szoveg[0::2])  # "Pormzs"

# Csak a páratlan indexű karakterek
print(szoveg[1::2])  # "rgazá"

Sztring megfordítása

A -1-es step visszafelé halad, így megfordítja a sztringet!

1
2
3
4
5
6
7
8
9
szoveg = "Python"

# Sztring visszafelé
print(szoveg[::-1])  # "nohtyP"

# Gyakorlati példa: palindrom ellenőrzés
szo = "görög"
if szo == szo[::-1]:
    print("Ez egy palindrom!")

Példák

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
szoveg = "Programozás"

# Első 7 karakter, minden másodikat
print(szoveg[:7:2])  # "Porm"

# 2-től 9-ig, minden harmadik
print(szoveg[2:9:3])  # "omo"

# Hátrafelé, az utolsó 6 karakterből
print(szoveg[-6::-1])  # "margorp"

# Hátrafelé, kettesével
print(szoveg[::-2])  # "szmroP"

Gyakori hibák és trükkök

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
szoveg = "hello"

# Ha a stop nagyobb, mint a hossz, nem kapunk hibát!
print(szoveg[0:100])  # "hello" - nem hibás!

# Ha a start nagyobb, mint a stop (és a step pozitív), üres sztringet kapunk
print(szoveg[4:2])   # "" (üres)

# A start és stop indexek abszolut pozíciója számít
print(szoveg[-2:2])   # "" (üres)

# Ha a start nagyobb, mint a sztring hossza, üres sztringet kapunk
print(szoveg[10:20]) # "" (üres)

# Negatív step negatív tartománnyal
print(szoveg[4:1:-1]) # "oll" (visszafelé 4-től 1-ig, de 1 nincs benne)

For ciklus sztringen

A for segítségével végig tudunk menni egy sztring minden karakterén. Ez az iteráció legegyszerűbb formája.

Alapvető szintaxis

1
2
3
for valtozo in sztring:
    # a válozó minden körben egy következő karaktert kap
    # végezz műveleteket a karakterrel

Példa

1
2
3
4
nev = "Anna"

for betu in nev:
    print(betu)

Kimenet

1
2
3
4
A
n
n
a

Mi történik lépésről lépésre?

  • Az első körben betu értéke "A" lesz
  • Kiírja: A
  • A második körben betu értéke "n" lesz
  • Kiírja: n
  • A harmadik körben betu értéke "n" lesz
  • Kiírja: n
  • A negyedik körben betu értéke "a" lesz
  • Kiírja: a
  • Nincs több karakter, a ciklus véget ér

Számolás for ciklussal

1
2
3
4
5
6
7
8
szoveg = "Hello World"
maganhangzok = 0

for betu in szoveg:
    if betu.lower() in "aeiou":  # angol magánhangzók
        maganhangzok += 1

print(f"Magánhangzók száma: {maganhangzok}")  # 3

Magyarázat

  • Végigmegyünk minden karakteren
  • Kisbetűssé alakítjuk (hogy pl. az 'A' is 'a' betűnek számítson)
  • Megnézzük, hogy magánhangzó-e (elegendő a kisbetűkre koncentrálni)
  • Ha igen, növeljük a számlálót

Sztring metódusok

A metódusok olyan függvények, amelyek egy objektumhoz tartoznak. A sztring metódusokat pont (.) után írjuk a sztring után. A sztringek metódusai nem változtatják meg az eredeti sztringet, hanem egy új sztringet adnak vissza!

Általános szintaxis sztring_valtozo.metodus_neve()

Kis- és nagybetűs átalakítások

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
szoveg = "hello Világ"

# CSUPA NAGYBETŰ
print(szoveg.upper())  # "HELLO VILÁG"

# csupa kisbetű
print(szoveg.lower())  # "hello világ"

# Első betű nagybetűs, többi kisbetű
print(szoveg.capitalize())  # "Hello világ"

# Minden Szó Első Betűje Nagybetűs
print(szoveg.title())  # "Hello Világ"

# FONTOS: az eredeti sztring nem változik!
print(szoveg)  # még mindig "hello Világ"

Gyakorlati példa

1
2
3
4
nev = input("Add meg a neved: ")
# A felhasználó bármilyen formában írhatja be (ANNA, anna, AnNa)
helyes_nev = nev.capitalize()
print(f"Üdvözöllek, {helyes_nev}!")

Szóközök eltávolítása

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
szoveg = "   hello világ   "

# Mindkét oldalról eltávolítja a kezdő és befejező szóközöket
print(szoveg.strip())  # "hello világ"

# Csak balról távolítja el
print(szoveg.lstrip())  # "hello világ   "

# Csak jobbról távolítja el
print(szoveg.rstrip())  # "   hello világ"
Miért hasznos a strip()?

Amikor a felhasználó begépel valamit, gyakran véletlenül szóközöket üt előtte vagy utána. A strip() ezeket eltávolítja.

1
2
3
4
5
jelszo = input("Jelszó: ")
jelszo_tiszta = jelszo.strip()  # Eltávolítja a felesleges szóközöket, de
                                # funkcionálisan hibás, ha a szóköz elején
                                # és/vagy végén szándékosan ténylegesen
                                # szóközt használunk.

Keresés és számolás

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
mondat = "A Python programozási nyelv nagyszerű. Python mindenhol."

# Hányszor szerepel egy részsztring?
print(mondat.count("Python"))  # 2
print(mondat.count("programozási"))  # 1
print(mondat.count("Java"))  # 0

# Szerepel-e benne? (in operátor - nem metódus, de hasznos)
print("Python" in mondat)  # True
print("Java" in mondat)  # False

# Hol van először? (milyen indextől kezdődik)
print(mondat.find("Python"))  # 2
print(mondat.find("Java"))  # -1 (ha nincs benne)

Csere (replace)

1
2
3
4
5
6
7
8
szoveg = "A macska az ágyon ül."

# Minden "macska" szót kicserél "kutya"-ra
uj_szoveg = szoveg.replace("macska", "kutya")
print(uj_szoveg)  # "A kutya az ágyon ül."

# Az eredeti sztring értéke nem változik!
print(szoveg)  # "A macska az ágyon ül."

Több csere egyszerre

1
2
3
szoveg = "hello hello hello"
uj = szoveg.replace("hello", "szia")
print(uj)  # "szia szia szia"

len() függvény - sztring hossza

A len() nem metódus, hanem beépített függvény. Visszaadja, hány karakter van a sztringben.

1
2
3
4
5
6
7
8
szoveg = "Python"
print(len(szoveg))  # 6

ures = ""
print(len(ures))  # 0

hosszu = "Ez egy hosszabb mondat."
print(len(hosszu))  # 23 (szóközök és írásjelek is számítanak, azok is karakterek!)