Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

7. díl - 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.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.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.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?
9 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 (4)

 

 

Komentáře

Avatar
Michal Šmahel (ceskyDJ):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ě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. ledna 20:12

Ano, je chyba v ukázce.

 
Odpovědět 23. ledna 20: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 6 zpráv z 6.