Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

9. diel - Cyklus for v Pythone

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

Teraz prejdeme k cyklom. Po dnešnom Python tutoriále 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 nasledovná:

for prvek in sekvence:
    # blok príkazov

Sekvencie v Pythone sú kontajnerové dátové štruktúry, tj sú to 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(začátek, konec, krok):

  • Začiatok určuje, na ktorom indexe sa začína. Predvolená hodnota je 0. Ide o nepovinný parameter.
  • Koniec 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.
  • Krok š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 for cyklu.

Klepanie 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:

Výstup cyklu for:
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.

Rad

Príkaz sa spustí jedenásťkrát bez toho, aby napíšeme niečo navyše. Vidíme, že cykly sú mocným nástrojom. 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:

Výstup cyklu:
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:

Výstup cyklu:
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 prvek 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:

slovo = "ahoj"
for znak in slovo:
   print(znak)

Výstupom je:

Výstup cyklu:
a
h
o
j
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:

Výstup cyklů:
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. Program funguje pekne, ale stále sme toho museli dosť napísať. Pokiaľ vás napadlo, že v podstate robíme desaťkrát to isté a iba zvyšujeme číslo, ktorým násobíme, máte pravdu. Nič nám nebráni v tom, aby sme vložili dva cykly do seba:

print("Malá násobilka pomocí dvou cyklů:")
for j in range(1, 11):
    for i in range(1, 11):
        print(i * j, end = " ")
    print()

Pomerne zásadný rozdiel, že? Pochopiteľne nemôžeme použiť u oboch cyklov premennú i, pretože sú vložené do seba. Premenná j nadobúda vo vonkajšom cykle hodnoty 110. V každej iterácii (rozumajme priebehu) cyklu je potom spustený ďalší cyklus s premennou i. Tento cyklus je nám už známy, vypíše násobky, v tomto prípade násobíme premennú j. Po každom behu vnútorného cyklu potom dôjde ešte k odriadkovaniu zavolaním prázdnej funkcie print().

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("Mocninátor")
print("==========")
a = int(input("Zadajte základ mocniny: "))
n = int(input("Zadajte exponent: "))
result = a
for i in range(n - 1):
    result = result * a

print(f"Výsledok: {result}")
print("Ďakujem za použitie mocninátora")

Výstup programu:

Konzolová aplikácia
Mocninátor
==========
Zadejte základ mocniny:
2
Zadejte exponent:
3
Výsledek: 8
Děkuji za použití mocninátoru

Asi všetci tušíme, ako funguje mocnina. Pre istotu pripomenieme, že napríklad 2 3 = 2 * 2 * 2. Mocninu a n 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ť. Pokiaľ k mocninám potrebujete viac informácií, máme tu samozrejme lekciu s algoritmom výpočtu ľubovoľnej mocniny.

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

V budúcej lekcii, Cyklus while v Pythone , sa ešte budeme venovať cyklom. Naučíme sa používať while cyklus 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é 298x (3.22 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python

 

Predchádzajúci článok
Riešené úlohy k 7.-8. lekciu Pythona
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:
4 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