9. diel - Cyklus for v Pythone
V predchádzajúcom cvičení, Riešené úlohy k 7.-8. lekcii 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 item in sequence: # block of commands
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(start, end, step)
:
- Parameter
start
určuje, na ktorom indexe sa začína. Predvolená hodnota je0
. 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 akon-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 je1
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 don-1
(don
, 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šiei
-té číslo don-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:
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. 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("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? 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("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ť. 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é 0x (1.55 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python