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:
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.
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ť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
:
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ä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.
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 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("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
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:
sentence = "C# is the best!"
sentence = sentence.replace("C#", "Python")
print(sentence)
V konzole uvidíme:
String methods:
Python is the best!
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. lekcii Pythona, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.