C# týden November Black Friday
BlackFriday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C#

Lekce 7 - Textové řetězce v Pythonu - pokračování

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

V minulé lekci, Textové řetězce v Pythonu, jsme se podívali na řetězce v Pythonu. V dnešním tutoriálu v nich budeme pokračovat. Naučíme se jejich porovnávání, řezání, formátování a jejich metody.

Řetězce

Porovnávání

Řetězce se dají porovnávat pomocí standardních porovnávacích operátorů:

Operátor Zápis
Rovnost ==
Je ostře větší >
Je ostře menší <
Je větší nebo rovno >=
Je menší nebo rovno <=
Nerovnost !=
Obecná negace !

Řetězce se porovnávají podle abecedy. Přesněji řečeno tak, že se vezmou postupně jednotlivé znaky porovnávaných řetězců a porovnají se pomocí funkce ord(). Tudíž "a" je menší než "b", jelikož číselná hodnota "a" je 97 a číselná hodnota "b" je 98. (97 < 98).

Příklady:

print("a" < "b")
print("b" < "a")
print("c" == "c")
print("ab" >= "a")
print("e" <= "df")
print("java" == "javascript")
print("python" != "php")

Řezání

Ze řetězců lze "extrahovat" jednotlivé prvky stejně jako ze seznamů. K tomuto účelu se používají hranaté závorky.

Syntaxe je totožná, jako u seznamů (řetězec můžeme tedy chápat jako seznam znaků):

  • název_seznamu[m] - vybere jediný znak
  • název_seznamu[m:n] - vybere znaky v rozsahu mn-1
  • název_seznamu[m:n:i] - vybere m a každý i-tý znak do n-1

Samozřejmě lze využít i speciality jako [:] - vybere celý řetězec, nebo [::-1] - převrátí řetězec.

Příklady:

retezec = "lokomotiva"
print(retezec[0])
print(retezec[1:4])
print(retezec[::2])
Konzolová aplikace
>>> retezec = "lokomotiva"
>>> retezec[0]
l
>>> retezec[1:4]
oko
>>> retezec[::2]
lkmtv

Metody

Řetězce na sobě mají mnoho užitečných metod. Díky nim lze řetězce jednoduše upravovat. Zde uvedu jen některé z nich.

count("podretezec")

Vrátí počet podřetězců v jiném řetězci. Lze zadat i výřez.

retezec = "abeceda"
print(retezec.count("a"))
print(retezec.count("e", 1, 4)) # to samé jako retezec[1:4].count("e")

endswith("podre­tezec")

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Vrátí booleovskou hodnotu (True/False) jestli řetězec končí zadaným řetězcem. Lze zadat i výřez.

retezec = "abeceda"
print(retezec.endswith("a"))
print(retezec.endswith("e"))

find("podretezec")

Vrátí index nejlevější pozice řetězce v jiném řetězci. Pokud není nalezen, vrátí -1 . Lze zadat i výřez.

retezec = "abeceda"
print(retezec.find("a"))
print(retezec.find("f"))

index("podretezec")

Dělá v podstatě to samé jako metoda find, avšak pokud řetězec nenalezne, vyvolá výjimku.

isalpha()

Vrátí booleovskou hodnotu True, pokud jsou všechny znaky v řetězci písmenné znaky a řetězec obsahuje minimálně jeden znak. Jinak vrací False.

prvni_retezec = "abeceda"
print(prvni_retezec.isalpha())
druhy_retezec = "agent007"
print(druhy_retezec.isalpha())

isdigit()

Vrátí booleovskou hodnotu True, pokud jsou všechny znaky v řetězci číselné znaky (0 - 9) a řetězec obsahuje minimálně jeden znak. Jinak vrací False.

prvni_retezec = "123"
print(prvni_retezec.isdigit())
druhy_retezec = "agent007"
print(druhy_retezec.isdigit())

islower("podre­tezec")

Vrátí booleovskou hodnotu True, pokud jsou všechny znaky v řetězci malá písmena a řetězec obsahuje minimálně jeden znak. Jinak vrací False.

prvni_retezec = "abeceda"
print(prvni_retezec.islower())
druhy_retezec = "aBEceDa"
print(druhy_retezec.islower())

isupper()

Vrátí booleovskou hodnotu True, pokud jsou všechny znaky v řetězci velká písmena a řetězec obsahuje minimálně jeden znak. Jinak vrací False.

prvni_retezec = "ABECEDA"
print(prvni_retezec.isupper())
druhy_retezec = "aBEceDa"
print(druhy_retezec.isupper())

lower()

Převede znaky v řetězci na malá písmena.

prvni_retezec = "ABECEDA"
print(prvni_retezec.lower())
druhy_retezec = "PythoN"
print(druhy_retezec.lower())

replace("hleda­ny_retezec", "nahrazujici_re­tezec")

Nahradí v řetězci podřetězec jiným podřetězcem a vrátí výsledek jako nový řetězec.

retezec = "C-sharp je nejlepší!"
print(retezec)
retezec = retezec.replace("C-sharp", "Python")
print(retezec)

startswith("po­dretezec")

Vrátí booleovskou hodnotu (True/False) jestli řetězec začíná zadaným podřetězcem. Lze zadat i výřez.

retezec = "abeceda"
print(retezec.startswith("a"))
print(retezec.startswith("e"))

upper()

Převede znaky v řetězci na velká písmena.

prvni_retezec = "abeceda"
print(prvni_retezec.upper())
druhy_retezec = "PythoN"
print(druhy_retezec.upper())

Formátování

Formátování textu nám umožňuje vkládat do něj jednoduše proměnné pomocí zástupných znaků. Docílíme tak přehlednějšího kódu, než kdybychom řetězec nastavovali.

Formátovat text lze pomocí metody format(), nebo pomocí %. Avšak formátování pomocí % je zastaralé, takže se ho učit nebudeme. Toto formátování textu je v Pythonu 3 jen pro snazší přechod od Pythonu 2 na Python 3. V dalších verzích již zřejmě nebude.

Formátování probíhá tak, že jako argumenty dáme do metody jednotlivé řetězce, nebo odkazy na řetězce. První argument má index 0, další má index 1, atd.

Příklad:

prvni_retezec = "Python"
retezec = "{0} je nejlepší!".format(prvni_retezec)
print(retezec)

Popřípadě lze i psát:

prvni_retezec = "Python"
retezec = "{0} je nejlepší!"
retezec = retezec.format(prvni_retezec)
print(retezec)

{0} nám zastupuje podřetězec, který se na toto místo vloží z argumentu metody. 0 je index argumentu, tedy první. Tuto část řetězce lze měnit. Ostatní části měnit nelze.

Více argumentů vložíme následujícím způsobem:

prvni_retezec = "Python"
druhy_retezec = "nejlepší"
retezec = "{0} je {1}!"
retezec = retezec.format(prvni_retezec, druhy_retezec)
print(retezec)

Pořadí lze i měnit, jelikož máme jednotlivé řetězce pěkně očíslované:

prvni_retezec = "Python"
druhy_retezec = "Nejlepší"
retezec = "{1} je {0}!"
retezec = retezec.format(prvni_retezec, druhy_retezec)
print(retezec)

Ještě větší prohloubení (v AJ): Další metody můžete zjistit zadáním příkazu help(str) v pythonovské konzoli. Máte-li zájem o pokročilejší formátování - Odkaz na dokumentaci Pythonu

Tak a to je vše k řetězcům. V příští lekci, Funkce a výjimky v Pythonu, se podíváme na vytváření vlastních funkcí a ošetření chyb v programu.


 

 

Aktivity (7)

 

 

Komentáře

Avatar
Michal Šmahel:24.6.2015 22:16
startswith("podretezec")

Vrátí booleovskou hodnotu (True/False) jestli řetězec končí zadaným podřetězcem. Lze zadat i výřez.

Nemá tam být ..."řetězec začíná zadaným"...??

Odpovědět
24.6.2015 22:16
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Michal Šmahel
gcx11:25.6.2015 8:26

Ano má, díky :)

 
Odpovědět
25.6.2015 8:26
Avatar
ra3sk
Člen
Avatar
ra3sk:26.6.2016 21:32

Prečo

"ab" >= "a"

je True a

"e" <= "df"

je False?

 
Odpovědět
26.6.2016 21:32
Avatar
gcx11
Redaktor
Avatar
Odpovídá na ra3sk
gcx11:26.6.2016 22:14

Porovnává se po znacích, jako napřáklad ve slovníku.

"a" < "ab"

Je větší délkou, přidáš rovnost, která to neovlivní a otočíš.

"e" < "d"

Na zbytek se Python nedívá, protože "d" je v abecedě před "e".

 
Odpovědět
26.6.2016 22:14
Avatar

Člen
Avatar
:26.12.2016 16:50

Ahoj. Když zkouším tvůj ukázkový kód k metodě .replace(), poslední příkaz, tj. print(retezec) mi vrací původní (nezměněný) řetězec. Tobě, zdá se, se ale vrací změněný. V dokumentaci jsem se dočetl, že metoda .replace() vrací jen kopii řetězce, tzn. původní řetězec by se měnit neměl. Je to chybka v ukázce, jiná verze pythonu (mám 3.5.2), nebo to jen špatně chápu?

 
Odpovědět
26.12.2016 16:50
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
gcx11
Redaktor
Avatar
Odpovídá na
gcx11:23.1.2017 20:12

Ano, je chyba v ukázce.

 
Odpovědět
23.1.2017 20:12
Avatar
Tomáš Drtílek:8.1.2018 21:33

Malá připomínka k replace: nahrazují se všechny výskyty podřetězce.
Např. "abeceda".repla­ce("a","x") vrací "xbecedx".
Možná by stálo za to se o tom v článku zmínit.

Editováno 8.1.2018 21:34
 
Odpovědět
8.1.2018 21:33
Avatar
jhlavaczek
Člen
Avatar
jhlavaczek:25.10.2018 20:21

Jen malá připomínka k formátování textu:

Následující kód

>>> prvni_retezec = "Python"
>>> druhy_retezec = "Nejlepší"
>>> retezec = "{1} je {0}!"
>>> retezec.format(prvni_retezec, druhy_retezec)
'Nejlepší je Python!'

vypíše výsledek

{0} je {1}!

Pokud zadáte následující kód,

retezec = retezec.format(prvni_retezec, druhy_retezec)

tak výsledek je správně.

 
Odpovědět
25.10.2018 20:21
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jhlavaczek
David Čápka:25.10.2018 20:32

Jo, mělo by tam být `retezec = ` , díky, opravil jsem to :)

Odpovědět
25.10.2018 20:32
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Fíla N.
Člen
Avatar
Fíla N.:7.12.2018 17:12

Ahoj,
funguje v Python metoda strip() jako trimování např. v Java? To by se do metod asi také hodilo :)

 
Odpovědět
7.12.2018 17:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.