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

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

V minulém díle jsme se podívali na řetězce v Pythonu. V tomto dí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.

>>> retezec = "C-sharp je nejlepší!"
>>> print(retezec)
'C-sharp je nejlepší!'
>>> 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, příště se podíváme na vytváření vlastních funkcí a ošetření chyb v programu.


 

  Aktivity (1)

Článek pro vás napsal gcx11
Avatar
(^_^)

Jak se ti líbí článek?
Celkem (6 hlasů) :
55555


 


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

 

 

Komentáře

Avatar
Michal Šmahel (ceskyDJ):
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
Avatar
ra3sk
Člen
Avatar
ra3sk:

Prečo

"ab" >= "a"

je True a

"e" <= "df"

je False?

 
Odpovědět 26. června 21:32
Avatar
gcx11
Redaktor
Avatar
Odpovídá na ra3sk
gcx11:

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. června 22:14
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 4 zpráv z 4.