Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.
IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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.
Ukážme si príklad:
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í.


 

Predchádzajúci článok
Typový systém druhýkrát - Dátové typy v Pythone
Všetky články v sekcii
Základné konštrukcie jazyka Python
Preskočiť článok
(neodporúčame)
Riešené úlohy k 5.-6. lekciu Pythona
Článok pre vás napísal gcx11
Avatar
Užívateľské hodnotenie:
10 hlasov
(^_^)
Aktivity