8

Cykly

Naučíme naše programy provádět opakovaně nějakou činnost.

Počítače a programování byly vymyšleny především proto, aby ušetřili lidem nudnou a repetitivní práci. Proto chceme umět počítači říct, že má nějakou činnost opakovat mnohokrát po sobě. K tomu nám v programování slouží takzvané cykly.

Cyklus FOR

Jeden z nejpoužívanějších cyklů v téměř všech programovacích jazycích ja takzvaný cyklus FOR. Tento cyklus umí projít jakýkoliv zadaný seznam prvek po prvku a pro každý prvek vykonat určitý blok kódu. Představme si například, že máme seznam známek z písemek nějakého studenta a chceme tyto známky vypsat na obrazovku, každou na nový řádek. K tomu nám stačí takovýto kousek kódu.

znamky = [1, 3, 2, 1, 1, 2]
for z in znamky:
  print(z)

V tomto konkrétním případě tedy náš cyklus prochází seznam známek jednu po druhé. Známka, která je právě zpracovávána, je uložena v proměnné z. Jméno této proměnné jsme si zvolili tak, aby bylo čitelné, co je v proměnné uloženo, tedy z jako známka.

Podobně jako v případě podmínek můžeme cyklu FOR předat celý blok příkazů najednou. Mějme například seznam jmen, kdy za každé jméno chceme přidat konec e-mailové adresy.

jmena = ['petr', 'pavel', 'jitka', 'jana']
for jmeno in jmena:
  mail = jmeno + '@gmail.com'
  print(mail)

Takto vytiskneme na obrazovku maily jednotlivých lidí, každý na jeden řádek.

Jak už bylo napsáno výše, cyklus může obsahovat libovolný blok příkazů, takže se můžeme opravdu rozparádit a vložit do bloku v cyklu FOR třeba podmínku.

jmena = ['petr', 'pavel', 'jitka', 'jana']

for jmeno in jmena:
  if len(jmeno) <= 4:
    mail = jmeno + '@gmail.com'
  else:
    mail = jmeno + '@seznam.cz'
    print(mail)

Tímto jsme vlastně vysvětlili to hlavní a zásadní co o cyklu FOR zatím potřebujeme vědět. Možná se to na první pohled nezdá, ale přidáním cyklu do našeho programátorského arzenálu jsme otevřeli pandořinu skříňku plnou možností, co v našich programech můžeme dělat. Taky jsme ale otevřeli bránu do samotného pekla, neboť už díky cyklům dokážeme řešit mnohem složitější a komplikovanější problémy, na které ale bude často potřeba pořádně roztočit mozkové závity.

Ukažme si například jak se pomocí cyklu spočítá součet všech čísel v seznamu.

soucet = 0
for cislo in cisla:
  soucet = soucet + cislo

Ne, že bychom zrovna tento cyklus nutně potřebovali. Python obsahuje funkci sum(), která umí dělat přesně toto. Tento příklad ale spíše ukázat, že s cykly můžeme dělat spoustu zajímavých věci.

Cvičení

1

Seznam hodnocení

pohodička

Mějme seznam hodnocení divadelní hry Plyšáci na útěku , který vypadá takto:

hodnoceni = [7, 9, 6, 7, 9, 8]
  1. Vytvořte program, který projde tento seznam a vypíše každé hodnocení na nový řádek.
  2. Upravte program tak, aby vypisoval výstup v tomto formátu
7/10
9/10
6/10
7/10
9/10
8/10
2

Procházení seznamu

zavařovačka
  1. Založte si program hesla.py a na jeho začátek vložte následující kód obsahující seznam hesel pro přihlášení do nějakého systému
hesla = [
  "xyz101",
  "punťa",
  "razor-blade",
  "1234",
  "12011986",
  "martin111",
  "trhnisi",
  "hokuspokus",
  "jeník15",
  "kristus-te-spasi",
  "beruška",
  "strčprstskrzkrk",
]
  1. Pomocí cyklu vypište všechny hesla na obrazovku, každé na jeden řádek.
  2. Upravte váš program tak, aby vypisoval jen bezpečná hesla, tedy taková, jež jsou delší než 8 znaků.
  3. Upravte váš program tak, aby vypisoval jen ta hesla, jež obsahují znak pomlčky ‘-’.
3

Složitější seznam

pohodička

Založte si program cykly02.py a použijte v něm následující seznam měsíců v roce, Všimněte si, že je to seznam seznamů.

mesice = [
  ["leden", 31],
  ["únor", 28],
  ["březen", 31],
  ["duben", 30],
  ["květen", 31],
  ["červen", 30],
  ["červenec", 31],
  ["srpen", 31],
  ["září", 30],
  ["říjen", 31],
  ["listopad", 30],
  ["prosinec", 31],
]
  1. Pomocí cyklu projděte tento seznam a vypište na výstup názvy jednotlivých měsíců.
  2. Pomocí dalšího cyklu vypište na výstup počty dní v jednotlivých měsících.

Bonusy

4

Hry

zapni hlavu

Následující seznam obsahuje seznam všech divadelních her, které se hrají v divadle Pěst na oko. Každá hra má svůj název a trvání v minutách.

hry = [
  ["Ňadro na ňadru na nádru", 180],
  ["Útok plyšových krokodýlů", 95],
  ["Cesta do říše zelí", 128],
  ["Romance na zdymadle", 144],
  ["Zátiší s mimozemšťanem", 135],
  ["Čtyři facky a dortík", 100],
  ["Motorová okurka", 165],
  ["Johnny Noir", 140],
  ["Pražská kavárna vrací úder", 130],
  ["Pět sester ve vratech", 111],
  ["Stařec a krajta", 187],
  ["Růžová nemoc", 210],
  ["Smrt v přímém přenosu", 265],
]
  1. Pomocí cyklu projděte tento seznam a vypište na výstup názvy všech her.
  2. Vypište na výstup názvy všech her, které trvají více než 120 minut.
  3. Vypište na výstup názvy všech her spolu s jejich trváním v hodinách a minutách.
5

Průměr

to dáš

Napište cyklus, který projde zadaný seznam desetinných čísel a spočítá jejich průměr. Seznam čísel si vytvořte na začátku programu.

6

Největší prvek

zapni hlavu

Napište cyklus, který projde zadaný seznam celých čísel a najde v něm největší hodnotu.