Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 6 - Textové řetězce v Pythonu

V minulé lekci Typový systém podruhé: Datové typy v Pythonu jsme si řekli více o datových typech v Pythonu.

V tomto Python tutoriálu se podíváme na textové řetězce. Naučíme se zjistit jejich délku, jak je sloučit, replikovat a mnoho dalšího.

Textové řetězce v Pythonu

Textové řetězce slouží k uchovávání textu. Jsou to v podstatě sekvence znaků obklopené buď jednoduchými ('text'), dvojitými ("text") nebo trojitými uvozovkami ('''text''' nebo """text"""). Díky této flexibilitě se naučíme snadno pracovat s různými textovými formáty, včetně řetězců obsahujících uvozovky. S řetězci lze provádět různé operace, jako je spojení, rozdělení, vyhledávání podřetězců či měnění velikosti písmen.

Vytváření řetězců

Už jsme si řekli, že řetězce se v Pythonu vytvářejí za pomoci jednoduchých, dvojitých nebo trojitých uvozovek.

Jednoduché a dvojité uvozovky

Nejjednodušší varianta je vytvoření řetězce pomocí jednoduchých nebo dvojitých uvozovek:

prazdny_retezec = ""
jiny_prazdny_retezec = ''
jazyk = "Python"
webova_stranka = 'ITnetwork.cz'
Kombinace jednoduchých a dvojitých uvozovek

Často potřebujeme v textu vypsat uvozovky. Abychom nemuseli znaky "escapovat", Python pro nás má řešení spočívající v kombinaci uvozovek:

zprava = 'Můj kamarád řekl: "Kdo používá Python, nikdy se nenudí!" A měl pravdu.'
print(zprava)

"Escapování" znaků znamená, že před speciálním znakem vložíme zpětné lomítko (\). Zpětné lomítko říká programovacímu jazyku, že následující znak má být interpretován doslova jako znak, a ne jako jeho speciální význam.

V konzoli uvidíme výstup:

Tvorba řetězců
Můj kamarád řekl: "Kdo používá Python, nikdy se nenudí!" A měl pravdu.

Na tom, zda budou vnější uvozovky jednoduché a vnitřní dvojité nezáleží :-)

Trojité uvozovky

Trojité uvozovky slouží k vytváření víceřádkových řetězců. I u jednoduchých a dvojitých lze k odřádkování použít sekvenci \n, ale u delších textů je to nepohodlné:

zprava = "Toto je víceřádkový řetězec vytvořený\npoužitím dvojitých uvozovek a znaku pro nový řádek."
viceradkova_zprava = '''Toto je také víceřádkový
řetězec, ale je vytvořený pomocí
trojitých dvojitých uvozovek.'''
print(zprava)
print(viceradkova_zprava)

V konzoli uvidíme výstup:

Tvorba řetězců
Toto je víceřádkový řetězec vytvořený
použitím dvojitých uvozovek a znaku pro nový řádek.
Toto je také víceřádkový
řetězec, ale je vytvořený pomocí
trojitých dvojitých uvozovek.

Řetězce z pohledu logiky

Pokud budeme chtít řetězec hodnotit z hlediska logiky, tak prázdný řetězec se vyhodnotí na bool hodnotu False a neprázdný na True:

prazdny_retezec = ""
jazyk = "Python"

print(bool(prazdny_retezec))
print(bool(jazyk))

Výstupem v konzoli je:

Tvorba řetězců
False
True

Speciální znaky

Občas potřebujeme trochu "speciální" text. Například v konzoli poskočit na další řádku, vytisknout uvozovky a podobně. Tyto speciální znaky zapisujeme uvnitř řetězců bez mezer pomocí tzv. escape sekvencí, které začínají zpětným lomítkem:

  • \n - nový řádek,
  • \t - tabulátor,
  • \a - zvonek (sekvecne pro pípnutí),
  • \\ - zpětné lomítko se píše jako \\ , protože jedním \ začínají speciální znaky,
  • \' - jednoduché uvozovky,
  • \" - dvojité uvozovky.

Ukažme si příklad:

print("Tento řetězec \npokračuje na novém řádku, odskočí \to jeden tabulátor vypíše zpětné lomítko: \\ a jednoduchou uvozovku: \'. Pak skončí.")

V konzoli uvidíme:

Tvorba řetězců
Tento řetězec
pokračuje na novém řádku, odskočí     o jeden tabulátor vypíše zpětné lomítko: \ a jednoduchou uvozovku: '. Pak skončí.

Operace s řetězci

S řetězci budeme provádět mnoho operací. Jak jsme si řekli už v úvodu lekce, můžeme např. určit jejich délku, sloučit je a replikovat. Pro práci s řetězci existuje mnoho funkcí a metod. Pojďme si ty nejdůležitější představit.

Zjištění délky řetězce

Délku řetězce zjistíme pomocí funkce len():

print(len("a"))
print(len("Python"))

V konzoli uvidíme:

Tvorba řetězců:
1
6

Slučování řetězců

Slučování je spojení více řetězců do jednoho. Něco na způsob sčítání čísel. Jako operátor použijeme znaménko +:

jazyk = "Python"
zprava = "je nejlepší!"
print(jazyk + zprava)

V konzoli uvidíme:

Tvorba řetězců:
Python je nejlepší!

Replikace

Replikace je "množení" řetězců. Zadaný řetězec se n-krát zopakuje, stačí ho "vynásobit" číslem. My zkusíme řetězec Bum! replikovat číslem 7:

retezec = "Bum! "
print(retezec * 7)

V konzoli uvidíme:

Replikace řetězců:
Bum! Bum! Bum! Bum! Bum! Bum! Bum!

Metody startswith(), endswith() a klíčové slovo in

Můžeme se jednoduše zeptat, zda řetězec začíná, končí nebo zda obsahuje určitý podřetězec (substring). Podřetězcem myslíme část původního řetězce. Všechny tyto metody budou jako parametr brát samozřejmě podřetězec a vracet hodnoty typu boolean (True/False). Zatím na výstup neumíme reagovat, ale pojďme si ho alespoň vypsat:

vstup = "Krokonosohroch"
print(vstup.startswith("krok"))
print(vstup.endswith("hroch"))
print("nos" in vstup)
print("roh" in vstup)

V konzoli uvidíme:

Metody řetězců:
False
True
True
False

Metody upper() a lower()

Rozlišování velkých a malých písmen může být někdy na obtíž. Mnohdy se budeme potřebovat zeptat na přítomnost podřetězce tak, aby nezáleželo na velikosti písmen. Situaci můžeme vyřešit pomocí metod upper() a lower(), které vrací řetězec ve velkých a v malých písmenech. Uveďme si reálnější příklad než je Krokonosohroch. Budeme mít v proměnné řádek konfiguračního souboru, který psal uživatel. Jelikož se na vstupy od uživatelů nelze spolehnout, musíme se snažit eliminovat možné chyby, zde např. s velkými písmeny:

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 konzoli 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 jsme schopni zjistit přítomnost jednotlivých slov v řetězci tak, že si nejprve řetězec převedeme celý na malá písmena (nebo na velká) a potom kontrolujeme přítomnost slova jen malými (nebo velkými) písmeny. Takhle by mimochodem mohlo opravdu vypadat jednoduché zpracování nějakého konfiguračního skriptu.

Metoda strip()

Další nástrahou mohou být mezery a obecně všechny tzv. bílé znaky, které nejsou vidět, ale mohou nám uškodit. Obecně může být dobré trimovat všechny vstupy od uživatele. Zkusme si v následující aplikaci před číslo a za číslo zadat několik mezer, strip() je odstraní. Odstraňují se vždy bílé znaky kolem řetězce, nikoli uvnitř:

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 konzoli 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

Pokud potřebujeme odstranit bílé znaky pouze na začátku nebo na konci řetězce, použijeme odvozené metody lstrip() a rstrip().

Metoda replace()

Asi nejdůležitější metodou pro datový typ str v Pythonu je nahrazení určité části řetězce jiným textem. Jako parametry metody replace() zadáme dva podřetězce: první je ten, který chceme nahrazovat, a druhý je tím, kterým chceme nahradit. Metoda vrátí nový řetězec, ve kterém proběhlo nahrazení. Pokud daný podřetězec metoda replace() nenajde, vrátí původní řetězec. Zkusme si to:

veta = "C# je nejlepší!"
veta = veta.replace("C#", "Python")
print(veta)

V konzoli uvidíme:

Metody řetězců:
Python je nejlepší!

Je toho ještě spoustu k vysvětlování a jsou další funkce metody, které jsme zatím neprobrali. K řetězcům se ještě vrátíme později v kurzu ;-)

V následujícím cvičení, Řešené úlohy k 5.-6. lekci Pythonu, si procvičíme nabyté zkušenosti z předchozích lekcí.


 

Předchozí článek
Typový systém podruhé: Datové typy v Pythonu
Všechny články v sekci
Základní konstrukce jazyka Python
Přeskočit článek
(nedoporučujeme)
Řešené úlohy k 5.-6. lekci Pythonu
Článek pro vás napsal gcx11
Avatar
Uživatelské hodnocení:
819 hlasů
(^_^)
Aktivity