Triko zdarma Triko zdarma
Spouštíme individuální výuku programování! Zaváděcí slevy 799 Kč 599 Kč/60 minut se zkušeným lektorem! Výuka osobně Praha a okolí nebo po Skype celá ČR. O termíny a slevu si pište na [email protected].
Extra 10 % bodů navíc a tričko zdarma při zadání kódu "TRIKO10"

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

Python Základní konstrukce Textové řetězce v Pythonu - pokračování

Unicorn College ONEbit hosting 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")

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.


 

 

Článek pro vás napsal gcx11
Avatar
Jak se ti líbí článek?
15 hlasů
(^_^)
Miniatura
Předchozí článek
Textové řetězce v Pythonu
Miniatura
Všechny články v sekci
Základní konstrukce jazyka Python
Miniatura
Následující článek
Cvičení k 6. a 7. lekci Pythonu
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  +1 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
Petr Beránek: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
Avatar
gcx11
Redaktor
Avatar
Odpovídá na Petr Beránek
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  +2 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.