Korálky na niti

O čem to je

Představ si náhrdelník z korálků s písmeny. Korálky jsou navlečené v pevném pořadí a dohromady tvoří slovo. Každý korálek má své místo, první, druhé, třetí.

V programu je text uložený přesně takhle, jako řada znaků. Říká se mu řetězec. Programy s textem pracují pořád: kontrolují hesla, hledají slova, upravují jména, čtou řádky ze souborů.

Nové pojmy

Řetězec (str)Text uložený jako řada znaků. Píše se do uvozovek, jednoduchých '…' nebo dvojitých "…".jmeno = "Eva"
ZnakJeden symbol řetězce: písmeno, číslice, mezera, interpunkce."Ahoj!" má 5 znaků: A, h, o, j, !
Index znakuPořadí znaku v řetězci, od nuly. Záporný index jde od konce, −1 je poslední znak.V "Ahoj" je [0] „A“ a [-1] „j“.
Délka len()Počet znaků řetězce. Mezery se počítají taky.len("Ahoj světe") je 10.

Indexy a řezy

znakpython
index012345

Řetězec t = "python" má 6 znaků. t[0] je „p“. Řez t[od:do] vezme znaky od indexu od do do − 1: t[0:2] je „py“, t[2:] je „thon“, t[::-1] je pozpátku „nohtyp“.

Spojování a opakování

  • "Ahoj" + " " + "Evo" spojí řetězce: „Ahoj Evo“.
  • "ha" * 3 zopakuje řetězec: „hahaha“.
  • "oj" in "ahoj" zjistí, jestli je část v řetězci: True.

Průchod po znacích

  • slovo = "banán"
  • pocet = 0
  • for znak in slovo:
  •     if znak == "a":
  •         pocet = pocet + 1
  • print(pocet)

Cyklus projde znaky b, a, n, á, n. „a“ je jen jednou, protože „á“ s čárkou je jiný znak. Vypíše 1.

s = "Programování". Co je s[0:3] a len(s)?
Znaky na indexech 0, 1, 2: „Pro“. Délka: P-r-o-g-r-a-m-o-v-á-n-í je 12 znaků.
Jak zjistíš, jestli zadané heslo má aspoň 8 znaků?
if len(heslo) >= 8: → heslo je dost dlouhé. Funkce len vrátí počet znaků včetně mezer a číslic.
✗jmeno = "eva" a pak jmeno[0] = "E" změní jméno na „Eva“.
✓jmeno = "E" + jmeno[1:] nebo jmeno = jmeno.capitalize().

Řetězce v Pythonu jsou neměnné. Jednotlivý znak nejde přepsat, Python ohlásí TypeError. Musíš vytvořit nový řetězec.

Řetězec je řada znaků v uvozovkách. Indexy začínají nulou, řezy fungují jako u seznamů. + spojuje, * opakuje, in hledá. Řetězec nejde měnit, jen z něj vytvořit nový.

Metody řetězců

O čem to je

Uživatel napíše do formuláře „ novák “ s mezerami a malým písmenem. Do databáze chceš uložit „Novák“. Nebo dostaneš řádek „Eva;17;Brno“ a chceš z něj tři údaje. Na to má Python sadu hotových metod.

Kdo je zná, zpracuje text na pár řádcích. Jsou to nástroje, které programátor používá denně.

Nové pojmy

ŘetězecText uložený jako řada znaků v uvozovkách, typ str. Je neměnný: žádná metoda ho nezmění, vždy vrátí nový řetězec.s = "ahoj"
MetodaFunkce, která patří k hodnotě a volá se přes tečku: hodnota.metoda()."ahoj".upper() vrátí „AHOJ“.
OddělovačZnak nebo text, který odděluje části řetězce.V „Eva;17;Brno“ je oddělovač středník.
Formátování f-řetězcemf"…{výraz}…" vloží hodnotu do textu. Za dvojtečkou můžeš určit formát, :.2f znamená 2 desetinná místa.f"{3.14159:.2f}" je „3.14“.

Nejčastější metody

MetodaCo vrátíPříklad → výsledek
upper(), lower()velká / malá písmena"Ahoj".upper() → „AHOJ“
strip()bez mezer na začátku a konci" ahoj ".strip() → „ahoj“
replace(a, b)nahradí všechna a za b"kos".replace("k", "n") → „nos“
split(odd)seznam částí podle oddělovače"a,b,c".split(",") → ['a', 'b', 'c']
odd.join(seznam)spojí seznam do řetězce"-".join(["a", "b"]) → „a-b“
find(x)index prvního výskytu, nebo −1"ahoj".find("o") → 2
count(x)počet výskytů"banana".count("a") → 3
startswith(x)True, když začíná x"Ahoj".startswith("A") → True
isdigit()True, když jsou to jen číslice"12".isdigit() → True

Zpracování řádku dat

Máš řádek radek = "Eva;17;Brno".
casti = radek.split(";") vytvoří seznam ['Eva', '17', 'Brno'].
jmeno = casti[0] je „Eva“.
vek = int(casti[1]) je číslo 17. Z textu „17“ udělá číslo přetypování.
print(f"{jmeno} ({vek} let)") vypíše „Eva (17 let)“.
Uprav vstup „ novák “ na „Novák“.
jmeno = vstup.strip().capitalize(). Metody jdou řetězit: strip() vrátí „novák“ a capitalize() z něj udělá „Novák“ (první písmeno velké, ostatní malá).
Spočítej slova ve větě „Dnes je hezky“.
len(veta.split()). Bez argumentu dělí split() podle mezer: ['Dnes', 'je', 'hezky'], tedy 3 slova.
✗s.upper() a pak print(s) vypíše text velkými písmeny.
✓s = s.upper() a pak print(s).

Řetězec je neměnný. upper() vrátí nový řetězec a ten musíš uložit, jinak se zahodí.

Metody řetězců (upper, strip, replace, split, join, find…) vždy vracejí nový řetězec, výsledek proto ulož. split rozdělí text na seznam, join ho zase spojí.