Výuka IT

Cykly

Cykly jsou v Pythonu konstrukce, které umožňují opakování určitých částí kódu. Dva nejčastěji používané jsou for a while.

Cyklus for

Představme si, že máme hrací kostku. Každá strana kostky má na sobě číslo od jedné do šesti. Teď si představme, že chceme vědět, jaká čísla jsou na kostce. Jak to uděláme? Podíváme se na každou stranu kostky a zapíšeme si jednotlivá čísla.

Obrázek nelze načíst.

V Pythonu to děláme podobně s pomocí cyklu for. Říkáme mu, aby postupně prošel seznam čísel a provedl nějakou akci pro každé číslo. Například, když mu řekneme, aby prošel seznam od jedné do šesti, zapíšeme to takhle:

for strana_kostky in range(1, 7, 1):
  print(strana_kostky)

První číslo v závorce určuje počátek, v našem případě začínáme na 1. Druhý prvek definuje do kdy, se cyklus provádí. Pozor, NENÍ to včetně něj, proto jsme museli napsat 7 (poslední uvažované číslo bude tak 6). Třetí číslo nám říká, o kolik máme proměnnou strana_kostky zvětšit. (Pokud chceme přičítat 1, jako v našem případě, můžeme třetí prvek ze závroky vynechat, v Pythonu se totiž jedná o výchozí hodnotu.)

Do proměnné strana_kostky se tak postupně dosadí 1, 2, 3, 4, 5 a 6.

Syntaxe s dvojtečkou a odsazením je stejná jako u podmínek.

Cyklus while

Představme si, že jsme na sportovním hřišti a chceme běžet kolem hřiště tolikrát, dokud neuběhneme minimálně 1000 metrů (hřiště je po obvodu dlouhé 300 metrů). Jak to uděláme? Uběhneme první kolo, podíváme se, jestli jsme uběhli více než 1000 metrů a pokud ne, poběžíme další kolo. Podíváme se, jestli jsme dohromady uběhli více než 1000 metrů a pokud ne poběžíme další kolo atd.

Obrázek nelze načíst.

V Pythonu to můžeme udělat pomocí cyklu while. Říkáme mu, aby opakoval určitý úkol, dokud je splněna nějáká podmínka. Například, když mu řekneme, aby opakoval úkol, dokud neuběhneme 1000 metrů, kód může vypadat takhle:

ubehnuto = 0 
while ubehnuto <= 1000: 
  print(ubehnuto) 
  ubehnuto = ubehnuto + 300

Na začátku začínáme s 0 uběhnutými metry. Dokud neuběhneme 1000 metrů, tak se vypíše počet celkem uběhnutých metrů a poté se přičte nově uběhnuté kolo.

Syntaxe až na slovo while je úplně stejná jako u podmínek (if). Dalo by se tedy říct, že while je jako podmínka, jejíž kód se může provést vícekrát.

Rozdíl mezi for a while

Cyklus for nám pomáhá projít všechny prvky v určitém rozmezí a pro každý provést nějakou akci, zatímco cyklus while nám umožňuje opakovat určitý úkol, dokud je splněna zadaná podmínka.

Nekonečné cykly

Nekonečné cykly jsou jako kolotoč, který se nikdy nepřestane otáčet. Programátor je může vytvořit, když potřebuje, aby určitý kód běžel znovu a znovu, dokud se nedosáhne určitého cíle nebo podmínky.

Podívejme se na příklad:

while True:
  print("Toto je nekonecny cyklus!")

V tomto kódu while True: znamená, že cyklus bude pokračovat donekonečna (True = 1, což je vždy splněno). Program bude tisknout "Toto je nekonečný cyklus!" znovu a znovu.

Obrázek nelze načíst.

Co když ale chceme nekonečný cyklus zastavit? K tomu použijeme příkaz break.

Příkaz break

Příkaz break slouží k zastavení cyklu, pokud je splněna určitá podmínka.

while True:
  odpoved = input("Mas hlad? ano/ne: ")
  if odpoved == "ano":
    print("Pojdme na svacinu!")
    break
  else:
    print("Dobre, pokracujeme dal!")

V příkladu výše se program ptá hráče, jestli má hlad. Pokud hráč odpoví "ano", program vypíše "Pojďme na svačinu!" a příkaz break zastaví cyklus. V případě jiné odpovědi se cyklus zopakuje.

Ale co když nechceme zastavit celý cyklus, ale chceme pouze přeskočit některé kroky? K tomu použijeme příkaz continue.

Příkaz continue

Příkaz continue používáme k přeskočení některých kroků v cyklu a pokračování dál. Podívejme se na příklad:

for cislo in range(1, 7):
  if cislo == 3:
    continue
  print("Cislo:", cislo)

V tomto příkladu program projde čísla 1, 2, 3, 4, 5 a 6 a každé z nich kromě čísla 3 vypíše. Když totiž narazí na číslo 3, příkaz continue ho přeskočí a pokračuje dalším číslem.


Procvičování

Tohle by bylo z teorie vše, a proto nastává čas si znalosti procvičit. Zde jsou pro nás připravena zadání (včetně řešení) a nakonec testovací kvíz.