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.
range()
teda môžeme mať s jedným až troma
parametrami:
range(n)
– Vráti čísla od nuly don-1
(do n, ktoré už zahrnuté nie je).range(m, n)
– Vráti čísla odm
don-1
.range(m, n, i)
– Vráti čísla odm
a každé ďalšie i-té číslo don-1
.
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
1
až 10
. 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