7. diel - Textové reťazce v Pythone
V predchádzajúcej lekcii, Typový systém druhýkrát - Dátové typy v Pythone, sme si povedali viac o dátových typoch v Pythone.
V tejto lekcii Pythonu sa pozrieme na textové reťazce. Naučíme sa, ako 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 zmenu 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:
empty_string = "" another_empty_string = '' language = "Python" website = 'ICTdemy.com'
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:
message = 'My friend said: "Whoever uses Python never gets bored!" And he was right.'
print(message)
"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.
Spätnú lomku \ by sme na slovenskej klávesnici napísali
stlačením Pravého Alt + Q:

V konzole uvidíme výstup:
Creating strings
My friend said: "Whoever uses Python never gets bored!" And he was right.
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é:
message = "This is a multiline string created\nusing double quotes and the newline character."
multiline_message = '''This is also a multiline
string, but it is created using
triple quotes.'''
print(message)
print(multiline_message)
V konzole uvidíme výstup:
Creating strings
This is a multiline string created
using double quotes and the newline character.
This is also a multiline
string, but it is created using
triple quotes.
Reťazce z pohľadu logiky
Ak budeme chcieť reťazec hodnotiť z hľadiska logiky, tak sa prázdny
reťazec vyhodnotí na bool hodnotu False a neprázdny
na True:
empty_string = ""
language = "Python"
print(bool(empty_string))
print(bool(language))
Výstupom v konzole je:
Creating strings
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ätnou lomkou:
\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.
Ukážme si príklad:
print("This string \ncontinues on a new line, skips \tone tab, prints a backslash: \\ and a single quote: \'. Then it ends.")
V konzole uvidíme:
Creating strings
This string
continues on a new line, skips one tab, prints a backslash: \ and a single quote: '. Then it ends.
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:
Creating strings:
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 +:
language = "Python"
message = " is the best!"
print(language + message)
V konzole uvidíme:
Creating strings:
Python is the best!
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 Bang!
replikovať číslom 7:
string = "Bang! "
print(string * 7)
V konzole uvidíme:
Strings replication:
Bang! Bang! Bang! Bang! Bang! Bang! Bang!
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 bool
(True / False). Na výstup zatiaľ nevieme reagovať,
ale poďme si ho aspoň vypísať:
input_string = "Rhinopotamus"
print(input_string.startswith("rhin"))
print(input_string.endswith("tamus"))
print("pot" in input_string)
print("lol" in input_string)
V konzole uvidíme:
String methods:
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
Rhinopotamus. 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:
config = "Fullscreen shaDows autosave"
config = config.lower()
print("Will the game run in fullscreen?")
print("fullscreen" in config)
print("Will shadows be turned on?")
print("shadows" in config)
print("Will sound be turned off?")
print("nosound" in config)
print("Would the player like to use autosave?")
print("autosave" in config)
V konzole uvidíme:
String methods:
Will the game run in fullscreen?
True
Will shadows be turned on?
True
Will sound be turned off?
False
Would the player like to use autosave?
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 je vidno, 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() ich odstrániť. Odstraňujú sa vždy biele znaky okolo
reťazca, nie vo vnútri:
print("Enter a number:")
user_input = input()
print("Here's what you originally wrote: " + user_input)
print("Your text after the strip() method: " + user_input.strip())
number = int(user_input.strip())
print("I converted the text you entered to a number. Here it is: " + str(number))
V konzole uvidíme:
String methods:
Enter a number: 5
Here's what you originally wrote: 5
Your text after the strip() method: 5
I converted the text you entered to a number. Here it is: 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 je v
Pythone nahradenie určitej časti reťazca iným textom. Ako parametre metódy
replace() zadáme dva podreťazce: 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:
sentence = "C# is the best!"
sentence = sentence.replace("C#", "Python")
print(sentence)
V konzole uvidíme:
String methods:
Python is the best!
Na vysvetľovanie je toho ešte dosč. 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 6.-7. lekcii Pythonu, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.
