6. diel - Textové reťazce v Pythone
V minulej lekcii, Typový systém druhýkrát - Dátové typy v Pythone , sme si povedali viac o dátových typoch v Pythone.
V tomto Python tutoriále sa pozrieme na textové reťazce. Naučíme sa zistiť ich dĺžku, ako ich zlúčiť, replikovať a mnoho ďalšieho.
Textové reťazce v Pythone
Textové reťazce slúžia na uchovávanie textu. Sú to v podstate sekvencie
znakov obklopené buď jednoduchými ('text'
), dvojitými
("text"
), alebo trojitými úvodzovkami ('''text'''
alebo """text"""
). Vďaka tejto flexibilite sa naučíme ľahko
pracovať s rôznymi textovými formátmi, vrátane reťazcov obsahujúcich
úvodzovky. S reťazcami je možné vykonávať rôzne operácie, ako je
spojenie, rozdelenie, vyhľadávanie podreťazcov či menenie veľkosti
písmen.
Vytváranie reťazcov
Už sme si povedali, že reťazce sa v Pythone vytvárajú pomocou jednoduchých, dvojitých alebo trojitých úvodzoviek.
Jednoduché a dvojité úvodzovky
Najjednoduchším variantom je vytvorenie reťazca pomocou jednoduchých alebo dvojitých úvodzoviek:
prazdny_retezec = "" jiny_prazdny_retezec = '' jazyk = "Python" webova_stranka = 'ITnetwork.cz'
Kombinácia jednoduchých a dvojitých úvodzoviek
Často potrebujeme v texte vypísať úvodzovky. Aby sme nemuseli znaky "escapovať", Python pre nás má riešenie spočívajúce v kombinácii úvodzoviek:
zprava = 'Môj kamarát povedal: "Kto používa Python, nikdy sa nenudí!" A mal pravdu.'
print(zprava)
"Escapovanie" znakov znamená, že pred špeciálnym znakom
vložíme spätnú lomku (\
). Spätná lomka hovorí
programovaciemu jazyku, že nasledujúci znak má byť interpretovaný doslova
ako znak, a nie ako jeho špeciálny význam.
V konzole uvidíme výstup:
Tvorba řetězců
Môj kamarát povedal: "Kto používa Python, nikdy sa nenudí!" A mal pravdu.
Na tom, či budú vonkajšie úvodzovky jednoduché a vnútorné dvojité,
alebo naopak, nezáleží
Trojité úvodzovky
Trojité úvodzovky slúžia na vytváranie viacriadkových reťazcov. Pri
jednoduchých a dvojitých úvodzovkách je možné na odriadkovanie použiť
sekvenciu \n
, ale pri dlhších textoch je toto riešenie
nepohodlné:
zprava = "Toto je viacriadkový reťazec vytvorený\npoužitím dvojitých úvodzoviek a znaku pre nový riadok."
viceradkova_zprava = '''Toto je tiež viacriadkový reťazec, ale je vytvorený pomocou trojitých úvodzoviek.'''
print(zprava)
print(viceradkova_zprava)
V konzole uvidíme výstup:
Tvorba řetězců
Toto je viacriadkový reťazec vytvorený použitím dvojitých úvodzoviek a znaku pre nový riadok.
Toto je tiež viacriadkový reťazec, ale je vytvorený pomocou trojitých úvodzoviek.
Reťazca z pohľadu logiky
Ak budeme chcieť reťazec hodnotiť z hľadiska logiky, tak prázdny
reťazec sa vyhodnotí na bool hodnotu False
a neprázdny na
True
:
prazdny_retezec = ""
jazyk = "Python"
print(bool(prazdny_retezec))
print(bool(jazyk))
Výstupom v konzole je:
Tvorba řetězců
False
True
Špeciálne znaky
Občas potrebujeme trochu „špeciálny“ text. Napríklad v konzole poskočiť na ďalší riadok, vytlačiť úvodzovky a podobne. Tieto špeciálne znaky zapisujeme vo vnútri reťazcov bez medzier pomocou tzv. escape sekvencií, ktoré začínajú spätným lomítkom:
\n
– nový riadok,\t
– tabulátor,\a
– zvonček (sekvencia pre pípnutie),\\
– spätná lomka sa píše ako\\
, pretože jedným\
začínajú špeciálne znaky,\'
– jednoduché úvodzovky,\"
- dvojité úvodzovky.
print("Tento reťazec \npokračuje na novom riadku, odskočí \to jeden tabulátor, vypíše spätnú lomku: \\ a jednoduchú úvodzovku: \'. Potom skončí.")
V konzole uvidíme:
Tvorba řetězců
Tento reťazec pokračuje na novom riadku, odskočí o jeden tabulátor, vypíše spätnú lomku: \ a jednoduchú úvodzovku: '. Potom skončí.
Operácia s reťazcami
S reťazcami budeme vykonávať mnoho operácií. Ako sme si povedali už v úvode lekcie, môžeme napr. určiť ich dĺžku, zlúčiť ich a replikovať. Na prácu s reťazcami existuje mnoho funkcií a metód. Poďme si predstaviť tie najdôležitejšie.
Zistenie dĺžky reťazca
Dĺžku reťazca zistíme pomocou funkcie len()
:
print(len("a"))
print(len("Python"))
V konzole uvidíme:
Tvorba řetězců:
1
6
Zlučovanie reťazcov
Zlučovanie je spojenie viacerých reťazcov do jedného. Niečo na spôsob
sčítania čísel. Ako operátor použijeme znamienko +
:
jazyk = "Python"
zprava = "je najlepšie!"
print(jazyk + zprava)
V konzole uvidíme:
Tvorba řetězců:
Python je najlepšie!
Replikácia
Replikácia je "množenie" reťazcov. Zadaný reťazec sa n-krát zopakuje,
stačí ho "vynásobiť" číslom. My skúsime reťazec Bum!
replikovať číslom 7
:
retezec = "Bum! "
print(retezec * 7)
V konzole uvidíme:
Replikace řetězců:
Bum! Bum! Bum! Bum! Bum! Bum! Bum!
Metódy
startswith()
, endswith()
a kľúčové slovo
in
Metódami sa môžeme jednoducho opýtať, či reťazec začína alebo
končí alebo či obsahuje určitý podreťazec (substring). Podreťazcom
myslíme časť pôvodného reťazca. Všetky tieto metódy budú samozrejme ako
parameter brať podreťazec a vracať hodnoty typu boolean
(True
/ False
). Na výstup zatiaľ nevieme reagovať,
ale poďme si ho aspoň vypísať:
vstup = "Krokonosohroch"
print(vstup.startswith("krok"))
print(vstup.endswith("hroch"))
print("nos" in vstup)
print("roh" in vstup)
V konzole uvidíme:
Metody řetězců:
False
True
True
False
Metódy upper()
a
lower()
Rozlišovanie veľkých a malých písmen môže byť niekedy na obtiaž.
Veľakrát sa budeme potrebovať opýtať na prítomnosť podreťazca tak, aby
na veľkosti písmen nezáležalo. Situáciu môžeme vyriešiť pomocou metód
upper()
a lower()
, ktoré vracia reťazec veľkými
alebo malými písmenami. Uveďme si reálnejší príklad, než je
Krokonosohroch. V premennej budeme mať riadok konfiguračného súboru, ktorý
písal používateľ. Keďže sa na vstupy od užívateľov nemožno
spoľahnúť, musíme sa snažiť eliminovať možné chyby, tu napr. ohľadom
veľkých písmen:
nastaveni = "Fullscreen shaDows autosave"
nastaveni = nastaveni.lower()
print("Poběží hra ve fullscreenu?")
print("fullscreen" in nastaveni)
print("Budou zapnuté stíny?")
print("shadows" in nastaveni)
print("Přeje si hráč vypnout zvuk?")
print("nosound" in nastaveni)
print("Přeje si hráč hru automaticky ukládat?")
print("autosave" in nastaveni)
V konzole uvidíme:
Metody řetězců:
Poběží hra ve fullscreenu?
True
Budou zapnuté stíny?
True
Přeje si hráč vypnout zvuk?
False
Přeje si hráč hru automaticky ukládat?
True
Vidíme, že sme schopní zistiť prítomnosť jednotlivých slov v reťazci tak, že si najskôr reťazec prevedieme celý na malé (resp. veľké) písmená a potom kontrolujeme prítomnosť slova len malými (resp. veľkými) písmenami. Takto by mimochodom mohlo skutočne vyzerať jednoduché spracovanie nejakého konfiguračného skriptu.
Metóda strip()
Ďalšou nástrahou môžu byť medzery a všeobecne všetky tzv. biele
znaky, ktoré nie sú vidieť, ale môžu nám uškodiť. Všeobecne môže byť
dobré trimovať všetky vstupy od používateľa. Skúsme si v nasledujúcej
aplikácii pred číslo a za číslo zadať niekoľko medzier a metódou
strip()
odstrániť. Odstraňujú sa vždy biele znaky okolo
reťazca, nie vo vnútri:
print("Zadejte číslo:")
vstup = input()
print("Zadal jste text: " + vstup)
print("Text po funkci strip: " + vstup.strip())
cislo = int(vstup.strip())
print("Převedl jsem zadaný text na číslo parsováním, zadal jste: " + str(cislo))
V konzole uvidíme:
Metody řetězců:
Zadejte číslo: 5
Zadal jste text: 5
Text po funkci strip: 5
Převedl jsem zadaný text na číslo parsováním, zadal jste: 5
Pokiaľ potrebujeme odstrániť biele znaky iba na začiatku
alebo na konci reťazca, použijeme odvodené metódy lstrip()
a
rstrip()
.
Metóda replace()
Asi najdôležitejšou metódou pre dátový typ str
v Pythone
je nahradenie určitej časti reťazca iným textom. Ako parametre metódy
replace()
zadáme dvoch podreťazcov: prvý je ten, ktorý chceme
nahrádzať, a druhý je ten, ktorým chceme nahradiť. Metóda vráti nový
reťazec, v ktorom prebehlo nahradenie. Ak daný podreťazec metóda
replace()
nenájde, vráti pôvodný reťazec. Skúsme si to:
veta = "C# je nejlepší!"
veta = veta.replace("C#", "Python")
print(veta)
V konzole uvidíme:
Metody řetězců:
Python je nejlepší!
Je toho ešte veľa na vysvetľovanie. Existujú aj ďalšie funkcie a metódy, ktoré sme zatiaľ neprebrali. K reťazcom sa ešte vrátime neskôr v kurze;-)
V nasledujúcom cvičení, Riešené úlohy k 5.-6. lekciu Pythona, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.