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
starturčuje, na ktorom indexe sa začína. Predvolená hodnota je0. Ide o nepovinný parameter. - Parameter
endurčuje, na ktorom indexe sa končí. Pozor, tento index už však zahrnutý nie je. V dokumentácii sa popisuje akon-1a jedná sa o povinný parameter. - Parameter
stepšpecifikuje spôsob inkrementácie (môžeme zvyšovať ľubovoľne: po dvoch, po desiatich…). Predvolená hodnota je1a jedná sa o nepovinný parameter.
Funkciu range() teda môžeme mať s jedným až troma
parametrami:
range(n)– Vráti čísla od nuly don-1(don, ktoré už zahrnuté nie je).range(m, n)– Vráti čísla odmdon-1.range(m, n, i)– Vráti čísla odma každé ďalšiei-té číslo don-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
