Cykly sú základným nástrojom v programovaní, ktorý nám umožňuje opakovať určitý blok kódu viackrát. Python ponúka dva hlavné typy cyklov: for a while. Cykly šetria čas a umožňujú písať efektívnejší kód.
Cyklus for používame vtedy, keď vieme, koľkokrát sa má určitý kód vykonať, alebo keď chceme prechádzať prvky nejakej kolekcie (zoznam, reťazec, atď.).
Výstup:
Všimnite si, že v cykle sa zopakujú všetky príkazy uvedené za ním, ktoré sú odsadené (4 medzery pred príkazom). Aký očakávate výstup, ak posledný príkaz na vykresľovanie krížikov zarovnáte hneď na začiatok riadka? Overte si to.
Výstup:
Cyklus for má vbudované automatické počítadlo (i = riadiaca premenná cyklu, programátor si ju však pomenuje ako chce). V Pythone sa vždy začína počítať od nuly, preto pri prvom prechode cyklom je i=0, po druhom je i=1, po treťom, i=2 atď. až v poslenom prechode cyklom to bude hodnota o jedna menšia ako počet opakovaní cyklu (u nás to bolo 5, preto v poslednej iterácii je vo výpise 4 Ahoj).
Ak potrebujeme riadiacu premennú nezačínať v nule, uvedieme to v parametri príkazu range:
Výstup:
range(od,po) vždy generuje číslenú sekvenciu, postupnosť celých čísel, prvý člen sekvencie je číslo uvedené ako prvý vstup v zátvorke, t. .j začína od spodnej hranice "od" (vrátane), ďalší člen je o 1 väčšie číslo, atď. až posledný člen je číslo menšie ako horná hranica "po", tá už do postupnosti nepatrí. range(5,9) vygeneruje 5, 6, 7, 8. range(cislo) s jedným parametrom, generuje čísla od 0 (vrátane) až do hodnoty "číslo - 1". range(3) vygeneruje 0, 1, 2 (t. j. ich počet vždy odpovedá číslu v zátvorke). range(od,po,krok) s troma parametrami, generuje čísla od hodnoty "od" (vrátane) až do hodnoty "po - 1", pričom ďalšia hodnota je vždy o hodnotu "krok" väčšia. range(2,14,3) vygeneruje 2, 5, 8, 11.
Nasledujúce štyri programy urobia skoro to isté - vypíšu za sebou párne jednociferné čísla, len budú inak oddelené (spôsob ukončenia výpisu pomocou príkazu print sa nastavuje špecifikovaním parametra end, bez jeho uvedienia print končí znakom \n , čo je znak konca riadka - kurzor skočí na nový riadok):
Výstup:
Výstup:
Výstup:
Výstup:
Ak chceme prechádzať prvkami zoznamu, stačí definovať akým zoznamom má cyklus for prechádzať:
Výstup:
Ak chceme prechádzať písmenkami raťazca, stačí použiť cyklus for takýmto spôsobom:
Výstup:
Výstup:
Vnorené cykly umožňujú vytvoriť cyklus vnútri iného cyklu. To je užitočné napríklad pri kombinovaní prvkov.
Výstup:
Od užívateľa načítajte celé číslo. Program má vypísať všetky jeho delitele (t.j. také čísla, ktorými sa dá zadané číslo vydeliť bezo zvyšku).
Bonus: Zistite, či je číslo na vstupe dokonalé, tzn. súčet jeho deliteľov (okrem jeho samého) je rovný danému číslu. Napr. 6 je dokonalé, lebo má delitele 1,2,3 a ich súčet 1+2+3=6.
Máte k dispozícii množinu čísel 1, 2, 3, 4. Vypíšte všetky ich:
a) variácie druhej triedy s opakovaním,
b) variácie druhej triedy bez opakovania,
c) kombinácie druhej triedy bez opakovania.
Bonus: Ako by ste zmenili program, ak by sme chceli nie dvojciferné, ale trojciferné výpisy? Viete zistiť aj ich počet? Vedeli by ste úlohy a, b, c naprogramovať aj pre množinu 1, 2,.. n, kde n zadá užívateľ?
Od užívateľa načítajte meno a vytvorte pre neho menovku v tvare:
dlzka = len(premenna).Cyklus while sa vykonáva tak dlho, kým je splnená určitá podmienka. Používame ho vtedy, keď nevieme vopred, koľko iterácií bude potrebných. Pred vykonávaním príkazov v cykle while sa najprv otestuje platnosť podmienky. Ak je splnená (True), tak sa príkazy začnú vykonávať, ak nie je splnená (False), všetky tam uvedené príkazy sa preskočia a program pokračuje za cyklom while.
Výstup:
while s uvedením podmienky True by sa vykonával donekonečna. Dá sa však z neho vyskočiť (ukončiť cyklus) príkazom break.
Vytvorte program, ktorý bude od užívateľa donekonečna pýtať celé číslo. V prípade že užívate zadá párne číslo, program sa mu poďakuje.
Príklad výstupu:
Pomôcka:
Číslo je párne, ak po delení dvoma dá zvyšok nula, t.j. cislo % 2 == 0.
Číslo je nepárne, ak po delení dvoma dá zvyšok jedna, t.j. cislo % 2 == 1.
1. Ktorý príkaz správne vytvorí cyklus, ktorý vypíše čísla od 1 do 5?
a)for i in range(5): print(i)for i in range(1, 6): print(i)for i in range(1, 5): print(i)while i <= 5: print(i)
2. Čo urobí príkaz break v tele cyklu?
3. Ktoré čísla sa vygenerujú pri príkaze range(3, 9, 2)?
4. Ktorý príkaz správne vypíše čísla od 10 do 1 v zostupnom poradí?
for i in range(10, 0, -1): print(i)for i in range(10, 1, -1): print(i)for i in range(1, 10, -1): print(i)for i in range(10, 0): print(i)
5. Čo vypíše tento kód?for i in range(3):
print(i * 2)
6. Ktorý cyklus je lepší pre prechádzanie prvkov v zozname?
a) Oba sú rovnako dobré7. Čo sa stane, ak vo while cykle nezmeníme premennú v podmienke?
a) Cyklus sa vykoná iba raz8. V ktorej situácii by ste použili while cyklus namiesto for cyklu?
a) Pri prechádzaní zoznamu9. Čo vypíše tento kód?
x = 1
while x < 4:
print(x)
x = x + 2
a) 1, 310. Aký bude výsledok tohto vnoreného cyklu?
for i in range(2):
for j in range(3):
print(f"{i}-{j}")
a) Vypíše 6 riadkov