Chci geek triko! Chci geek triko!
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ů:

  • ==
  • !=
  • <
  • >
  • <=
  • >=

Ř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:

>>> "a" < "b"
True
>>> "b" < "a"
False
>>> "c" == "c"
True
>>> "ab" >= "a"
True
>>> "e" <= "df"
False
>>> "java" == "javascript"
False
>>> "c-sharp" != "java"
True

Ř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"
>>> 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"
>>> retezec.count("a")
2
>>> retezec.count("e", 1, 4) # to samé jako retezec[1:4].count("e")
1

endswith("podre­tezec")

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

>>> retezec = "abeceda"
>>> retezec.endswith("a")
True
>>> retezec.endswith("e")
False

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"
>>> retezec.find("a")
0
>>> retezec.find("f")
-1

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"
>>> prvni_retezec.isalpha()
True
>>> druhy_retezec = "agent007"
>>> druhy_retezec.isalpha()
False

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"
>>> prvni_retezec.isdigit()
True
>>> druhy_retezec = "agent007"
>>> druhy_retezec.isdigit()
False

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"
>>> prvni_retezec.islower()
True
>>> druhy_retezec = "aBEceDa"
>>> druhy_retezec.islower()
False

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"
>>> prvni_retezec.isupper()
True
>>> druhy_retezec = "aBEceDa"
>>> druhy_retezec.isupper()
False

lower()

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

>>> prvni_retezec = "ABECEDA"
>>> prvni_retezec.lower()
'abeceda'
>>> druhy_retezec = "PythoN"
>>> druhy_retezec.lower()
'python'

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)
'C-sharp je nejlepší!'
>>> retezec = retezec.replace("C-sharp", "Python")
>>> print(retezec)
'Python je nejlepší!'

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"
>>> retezec.startswith("a")
True
>>> retezec.startswith("e")
False

upper()

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

>>> prvni_retezec = "abeceda"
>>> prvni_retezec.upper()
'ABECEDA'
>>> druhy_retezec = "PythoN"
>>> druhy_retezec.upper()
'PYTHON'

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)
>>> retezec
'Python je nejlepší!'

Popřípadě lze i psát:

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

{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)
'Python je nejlepší!'

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)
'Nejlepší je Python!'

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 (5)

 

 

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. ledna 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. ledna 21:34
 
Odpovědět 8. ledna 21:33
Avatar
jhlavaczek
Člen
Avatar
jhlavaczek:25. října 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. října 20:21
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na jhlavaczek
David Čápka:25. října 20:32

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

Odpovědět  +2 25. října 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! :)
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 9 zpráv z 9.