NOVINKA: Kurz kybernetickej bezpečnosti teraz už od 0 €. Staň sa žiadaným profesionálom. Zisti viac:
NOVINKA: Staň sa dátovým analytikom od 0 € a získaj istotu práce, lepší plat a nové kariérne možnosti. Viac informácií:

10. diel - Cyklus for v Pythone

V predchádzajúcom cvičení, Riešené úlohy k 8.-9. lekcii Pythonu, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.

Teraz prejdeme k cyklom. Po dnešnom Python tutoriáli už budeme mať takmer kompletnú výbavu základných konštrukcií a budeme schopní v Pythone programovať rozumné aplikácie.

Cykly

Ako už slovo cyklus napovedá, niečo sa bude opakovať. Keď chceme v programe niečo urobiť stokrát, určite nebudeme stokrát písať pod seba ten istý kód. Namiesto toho ho vložíme do cyklu. Cyklov máme viac druhov. Samozrejme si vysvetlíme, kedy ktorý použiť, a ukážeme si praktické príklady.

Cyklus for

Ak chceme pracovať so všetkými prvkami v sekvencii, použijeme cyklus for. Tento cyklus vždy obsahuje pevný počet opakovaní, ktorý sa rovná počtu prvkov v sekvencii. Syntax (zápis) cyklu for je takáto:

for item in sequence:
    # block of commands

Sekvencie v Pythone sú kontajnerové dátové štruktúry, t. j. premenné, ktoré môžu obsahovať viac položiek. S kontajnerovou štruktúrou (reťazcami) sme sa už stretli.

Funkcia range()

Pre cyklus for máme k dispozícii funkciu range(). Funkcia nám vracia vygenerované čísla, napríklad vo forme rozsahu (intervalu).

Funkcia má tri parametre, jej syntax je range(start, end, step):

  • Parameter start určuje, na ktorom indexe sa začína. Predvolená hodnota je 0. Ide o nepovinný parameter.
  • Parameter end určuje, na ktorom indexe sa končí. Pozor, tento index už však zahrnutý nie je. V dokumentácii sa popisuje ako n-1 a jedná sa o povinný parameter.
  • Parameter step špecifikuje spôsob inkrementácie (môžeme zvyšovať ľubovoľne: po dvoch, po desiatich…). Predvolená hodnota je 1 a jedná sa o nepovinný parameter.

Funkciu range() teda môžeme mať s jedným až troma parametrami:

  • range(n) – Vráti čísla od nuly do n-1 (do n, ktoré už zahrnuté nie je).
  • range(m, n) – Vráti čísla od m do n-1.
  • range(m, n, i) – Vráti čísla od m a každé ďalšie i-té číslo do n-1.

Príklady použitia cyklu for

Poďme si urobiť niekoľko jednoduchých príkladov na precvičenie cyklu for.

Klopanie na dvere

Väčšina z nás určite pozná Sheldona z The Big Bang Theory. Pre tých, ktorí ho nepoznajú, budeme simulovať situáciu, keď Sheldon klope na dvere svojej susedky. Vždy trikrát zaklope a potom zavolá: "Penny!". Náš kód by bez cyklov vyzeral takto:

print("Knock")
print("Knock")
print("Knock")
print("Penny!")

My už ale nič otrocky opisovať nemusíme:

for i in range(3):
    print("Knock")
print("Penny!")

Výstup programu:

Output of the for loop:
Knock
Knock
Knock
Penny!

Cyklus prebehne trikrát vďaka parametru 3 vo funkcii range(). Teraz môžeme skúsiť napísať do parametra funkcie range() v cykle namiesto trojky jedenástku. Príkaz sa spustí jedenásťkrát bez toho, aby sme napísali niečo navyše. Vidíme, že cykly sú mocným nástrojom.

Rad

Vypíšme si teraz čísla od jednej do desať a za každým medzeru:

for i in range(1, 11):
    print(i, end = ' ')

Vidíme, že premenná má naozaj v každej iterácii (priebehu) inú hodnotu:

Loop output:
1 2 3 4 5 6 7 8 9 10

Parameter end=' ' zaistí, že program po vypísaní každého čísla nevloží nový riadok, ale namiesto toho medzeru.

Nepárne čísla

Pomocou funkcie range() môžeme tiež určiť hranice intervalu, ktorý chceme iterovať, a to vrátane kroku:

for i in range(1, 11, 2):
    print(i, end = ' ')

Kód iteruje cez čísla v rozmedzí od 1 do 10 (vrátane 1 a vylúčene 11) s krokom 2. Bude teda vypisovať nepárne čísla:

Loop output:
1 3 5 7 9
Sekvencia znakov

Už sme si povedali, že cyklus for prejde všetky prvky v sekvencii. Iterovateľná sekvencia je aj reťazec a prvok je potom jednotlivý znak v reťazci. V každej iterácii sa aktuálny prvok sekvencie skopíruje do premennej item a vykonajú sa príkazy v cykle. Vyskúšajme si to na reťazcovej sekvencii, kedy si každý znak vypíšeme na jednotlivý riadok:

word = "hello"
for character in word:
   print(character)

Výstupom je:

Loop output:
h
e
l
l
o
Malá násobilka

Teraz si vypíšeme malú násobilku (násobky čísel 1 až 10, vždy do desiatich). Aby sme zadanie splnili, napíšeme si cyklus, ktorý prejde čísla od 1 do 10 a premennú vždy vynásobí daným číslom. Kód by mohol vyzerať asi takto:

for i in range(1, 11):
    print(i, end = " ")
print()
for i in range(1, 11):
    print(i * 2, end = " ")
print()
for i in range(1, 11):
    print(i * 3, end = " ")
print()
for i in range(1, 11):
    print(i * 4, end = " ")
print()
for i in range(1, 11):
    print(i * 5, end = " ")
print()
for i in range(1, 11):
    print(i * 6, end = " ")
print()
for i in range(1, 11):
    print(i * 7, end = " ")
print()
for i in range(1, 11):
    print(i * 8, end = " ")
print()
for i in range(1, 11):
    print(i * 9, end = " ")
print()
for i in range(1, 11):
    print(i * 10, end = " ")

Výstup v konzole:

Loops output:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
4 8 12 16 20 24 28 32 36 40
5 10 15 20 25 30 35 40 45 50
6 12 18 24 30 36 42 48 54 60
7 14 21 28 35 42 49 56 63 70
8 16 24 32 40 48 56 64 72 80
9 18 27 36 45 54 63 72 81 90
10 20 30 40 50 60 70 80 90 100

Za pozornosť stojí prázdna funkcia print(), ktorá tu plní funkciu odriadkovania na konci každého riadku.

Keď program funguje, ešte to neznamená, že je zapísaný správne alebo efektívne. V praxi si programátori často nechávajú od AI poradiť, či nejde kód zjednodušiť. Zadajme teraz do Copilota prompt: "Zjednoduš kód vypisujúci malú násobilku.".

Copilot nám kód upraví podobne, ako je zapísaný nižšie:

print("Multiplication with nested loops:")
for j in range(1, 11):
    for i in range(1, 11):
        print(i * j, end = " ")
    print()

Pomerne zásadný rozdiel, že?

Mocnina čísla

Urobme si ešte jeden program, na ktorom si ukážeme prácu s vonkajšou premennou. Aplikácia bude vedieť spočítať ľubovoľnú mocninu ľubovoľného čísla:

print("Exponent calculator")
print("==========")
a = int(input("Enter the base: "))
n = int(input("Enter the exponent: "))
result = a
for i in range(n - 1):
    result = result * a

print(f"Result: {result}")
print("Thank you for using our exponent calculator")

Výstup programu:

Konzolová aplikácia
Exponent calculator
==========
Enter the base:
2
Enter the exponent:
3
Result: 8
Thank you for using our exponent calculator

Asi všetci tušíme, ako funguje mocnina. Pre istotu pripomenieme, že napríklad 23 = 2 * 2 * 2. Mocninu an teda spočítame tak, že n-1 krát vynásobíme číslo a číslom a. Výsledok si samozrejme musíme ukladať do premennej. Spočiatku bude mať hodnotu premennej a a postupne sa bude v cykle prenásobovať. Ak potrebujete o mocninách vedieť viac informácií, máme tu samozrejme lekciu s algoritmom výpočtu ľubovoľnej mocniny.

Teraz už teda vieme, na čo sa cyklus for využíva. Zapamätajme si, že počet opakovaní je pevne daný.

Zhrnutie lekcie

Cyklus slúži na opakovanie časti programu, aby sme nemuseli rovnaký kód písať stále dokola. Cyklus for používame vtedy, keď chceme prejsť všetky prvky v nejakej sekvencii alebo keď dopredu vieme, koľkokrát sa má kód opakovať. Pomocou funkcie range() si môžeme vytvoriť rad čísel a určiť jeho začiatok, koniec aj krok. Hodnota konca sa do radu už nepočíta, napríklad range(1, 11) prejde čísla od 1 do 10. Cyklus for môžeme použiť aj na prechod reťazcom, kde postupne získame jednotlivé znaky. Cykly môžeme vkladať do seba, čo sa hodí napríklad pri výpise malej násobilky.

V nasledujúcej lekcii, Cyklus while v Pythone, sa ešte budeme venovať cyklom. Naučíme sa používať cyklus while a vylepšíme našu kalkulačku.


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 59x (2.01 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Riešené úlohy k 8.-9. lekcii Pythonu
Všetky články v sekcii
Základné konštrukcie jazyka Python
Preskočiť článok
(neodporúčame)
Cyklus while v Pythone
Článok pre vás napísal Vašek Doškář
Avatar
Užívateľské hodnotenie:
153 hlasov
Autor pracuje jako pedagog v oblasti elektroniky, elektrotechniky a programování. Rád tvoří appky všeho druhu. Má přehled v jazycích C#, Java, Kotlin, Javascript, Python a Rust
Aktivity