Cyklus

Význam cyklu a iterace

Cyklus se používá, pokud potřebujeme nějakou akci zopakovat vícekrát. Jeden průchod cyklem se nazývá iterace. Následující iterace je provedena, pokud je stále splněna podmínka cyklu.

Příklad:

Proveď u každého žáka ve třídě dotaz:
Jsi ve škole?


Jedna iterace cyklem je v tomto případě zpracování dotazu pro jednoho konkrétního žáka. Cyklus nám umožňuje projít danou operaci pro různé vstupy.

For cyklus

For cyklus slouží k projití pomocí předem jasně definovaných hodnot. Jeho syntaxe v Pythonu vypadá poněkud netradičně, takto:

Příklad:

for i in range(1,856):

Rozsah cyklu definujeme pomocí funkce range(od, do), proměnná i je instancí aktuálního průchodu cyklem. Při průchodu výše zmíněným cyklem proměnná i nabývá hodnot 1, 2, 3, ..., 854, 855 a 856.

Otázka: Nabude opravdu proměnná i hodnoty 856 a jaký má daná iterace s touto hodnotou průběh?


For cyklus - načtení z pole

Příklad:

for radek in a_file:

Příkaz projde všechny řádky v připojeném souboru s instancí a_file. Jednotlivý řádek bude při iteraci uložen do proměnné radek.

Stejným způsobem lze načítat i data z jakéhokoliv pole - viz následující téma.


While cyklus

Jak již název napovídá, while cyklus provádí danou operaci, zatímco je daná podmínka splněna. Syntaxe je velmi jednoduchá, proto se v algoritmizaci rozsáhle používá.

Definice vstupů do cyklu musí být ještě, než cyklus vůbec započne. Se vznikem while cyklu nelze definovat proměnné.

Příklad:

while result != 366000:
    result += 1

Proměnná result musí být definována výše v programu před vstupem do while cyklu. Například: result = 0.

Otázka: Jaká bude hodnota v proměnné result po iteraci se vstupem "result < 366000" ?


Přiřazovací operátory

Přiřazovací operátory slouží k jednodušší aktualizace proměnné.

Označení operátoruFunkce operátoru
+=Připočti k aktuální hodnotě proměnné
-=Odečti k aktuální hodnotě proměnné
*=Vynásob aktuální hodnotu proměnné
/=Vyděl k aktuální hodnotě proměnné


Skokové příkazy cyklu

Ovládat cyklus je možné nejen podle podmínky, ale také pomocí dvou skokových příkazů continue a break.

Příkaz continue program okamžitě posouvá do další iterace cyklu.

Příkaz break okamžitě ukončuje vnitřní cyklus.

Příklad:

for i in range(1,6):
    if i==2:
        print ("Pokračuj do další iterace!")
        continue
    print (i)
    if i>3:
        print("Násilím ukonči cyklus!")
        break


Zadání samostatné práce

Uživatel načte dvě libovolná kladná čísla, systém vypíše libovolnou mocninu jednoho čísla na druhé.

Jedno ze správných řešení se objeví po hodině

Vytvořte program, který bude generovat Fibonnaciho posloupnost a zastaví se ve chvíli, kdy dané číslo bude větší než uživatelský vstup.

Ukázkové řešení problému fibonnaci.py a fibonnaciZHodiny.py


Zdrojový kód

Zdrojový kód ke stažení - cyklus.py


result = 0

#Číselná iterace - for cyklus
for i in range(1,856):
    # K jednotlivým hodnotám lze přistupovat přes iterátor i
    result += i

print (result)

""" 
#Iterace z pole - for cyklus 
with open("test.txt", mode="r", encoding="utf-8") as a_file: 
    for radek in a_file: 
        print(radek) 
"""

#Číselná iterace - while cyklus
while result != 366000:
    result += 1

print(result)

#Příkazy uvnitř cyklů
for i in range(1,6):
    if i==2:
        print ("Pokračuj do další iterace!")
        continue
    print (i)
    if i>3:
        print("Násilím ukonči cyklus!")
        break

#Specialita Pythonu - else cyklu
for i in range (1,2):
    print (i)
else:
    print("Nakonec ještě něco dodám!")


Data na výstupu z Console:

    365940
    366000
    1
    Pokračuj do další iterace!
    3
    4
    Násilím ukonči cyklus!
    1
    Nakonec ještě něco dodám!