Niečo o znakových reťazcoch sme si už povedali. Na tieto informácie nadviažeme. Pre výpis špeciálnych znakov, poprípade bielych znakov máme nasledovný zápis:
\n - nový riadok
\t - tabulátor
\' - apostrof
\" - úvodzovka
\\ - opačná lomka
Viacriadkové reťazce sme si spomenuli pri dokumentačných reťazcoch, kde sa uvádzajú reťazce do troch po sebe idúcich úvodzovkách “ “ “ alebo apostrofoch ‚ ‚ ‚.
"""Tooo je
viacriadkový reťazec"""
Pri reťazcoch vieme používať kopec funkcií, ktoré samotný python obsahuje. Venujem tomu samotnú stránku metódy a funkcie pre dátový typ String.
Operácia in
Existuje binárna operácia in
, ktorá zisťuje, či sa zadaný podreťazec nachádza v nejakom konkrétnom reťazci. Zápis je takýto:
a = "Hello World"
b = "Wo"
c = "wo"
d = "e"
print(b in a)
print(c in a)
print(d in a)
print(c not in a) # niekedy nám v kombinácii s "if" može pomôcť
Výsledkom je:
True
False
True
True
funkcia len()
Vráti počet znakov v reťazci.
a = "Hello World"
print(len(a))
>>>11
Operácia indexovania []
Celému číslu v hranatých zátvorkách hovoríme index:
- znaky v reťazci sú indexované od
0
dolen()-1
, t.j. prvý znak v reťazci má index 0, druhý 1, … posledný má indexlen()-1
- výsledkom indexovania je vždy 1-znakový reťazec (čo je nový reťazec s kópiou 1 znaku z pôvodného reťazca) alebo chybová správa, keď indexujeme mimo znaky reťazca
- indexovať môžeme aj z opačnej strany, -1, -2,…
H | e | l | l | o | W | o | r | l | d | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
-11 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
Ukážme si to v kóde:
retazec = "Hello World"
print(retazec[0])
print(retazec[-2])
print(retazec[16])
Výsledkom je:
H
l
IndexError: string index out of range
Pri poslednom výpise nám python vráti chybu, nakoľko retazec nemá 17 znakov!
retazec = "Hello World"
for i in range(len(retazec)):
print(i, retazec[i])
0 H
1 e
2 l
3 l
4 o
5
6 W
7 o
8 r
9 l
10 d
Podreťazce
Indexovať môžeme nielen jeden znak, ale aj nejaký podreťazec celého reťazca. Opäť použijeme operátor indexovania, ale index bude obsahovať znak ':'
:
retazec = "Hello World"
print(retazec[0:4])
print(retazec[-4:-1])
print(retazec[6:len(retazec)])
print(retazec[:-1])
print(retazec[6: ])
print(retazec[ : ])
# retazec[prvý : zaposledný : krok]
print(retazec[0:-1:2])
print(retazec[: :-1])
Hell
orl
World
Hello Worl
World
Hello World
HloWr
dlroW olleH
Odporúčam prepísať a skúšať, aby ste pochopili čo sa kedy deje.
Reťazce sú v pamäti nemenné (nemeniteľné) !!!!
Typ str (znakové reťazce) je nemeniteľný typ (hovoríme aj immutable). To znamená, že hodnota reťazca sa v pamäti nedá zmeniť. Ak budeme potrebovať reťazec, v ktorom je nejaká zmena, budeme musieť skonštruovať nový. Tzv. nedokáže urobiť niečo takéto:
retazec = "Hello World"
retazec[2] = "x"
retazec[2] = "x"
TypeError: 'str' object does not support item assignment
Správny zápis by mal vyzerať trochu zložitejšie:
retazec = "Hello World"
novy_retazec = retazec[:2] + 'x' + retazec[3:]
print(novy_retazec)
Hexlo World
Poprípade ak by sme chceli pomeniť prvý a posledný znak:
retazec = "Hello World"
novy_retazec = 'x' + retazec[1:-1] + 'x'
print(novy_retazec)
xello Worlx
Porovnávanie znakov
Jednoznakové reťazce môžeme porovnávať relačnými operátormi ==
, !=
, <
, <=
, >
, >=
. Porovnávajú sa vnútorné reprezentácie a na to nám pomôžu nasledovné funkcie.
Funkcia ord(‚a‘) vráti vnútornú reprezentáciu znaku, funkcia chr(66) zas naopak vráti znak:
print(ord('a') > ord('A')) # 97 > 65
print('a' > 'A')
# výsledok
True
Porovnávať sa dajú aj dlhšie reťazce, kým sú v oboch reťazcoch rovnaké znaky, preskakuje ich. Pri prvom rôznom znaku, porovná tieto dva znaky.
print('kocur' < 'kohut')
# výsledok
True
V Ďalšej kapitole budeme pokračovať opäť dátovým typom String.