Lekcie
Cyklus for
Programy sú od toho, aby nám uľahčovali prácu a život. Presne na to je cyklus for, s ktorým vieme ľahko prejsť zoznamy, rozsahy čísel a podobne.
Cyklus while vs. cyklus for
V predchádzajúcej lekcii sme sa
naučili používať cyklus while. Spomeň si, ako funguje - opakuje blok kódu
dovtedy, kým platí jeho podmienka. Hodí sa vtedy, keď nevieš vopred,
koľkokrát sa má kód opakovať.
Cyklus for funguje naopak.
Používa sa vtedy, keď presne vieš, koľkokrát alebo čím všetkým
chceš prejsť - napríklad všetkými prvkami zoznamu alebo číslami od 1 do 10.
while |
for |
|---|---|
| Nevieme vopred, koľkokrát sa opakuje. | Vieme vopred, koľkokrát sa opakuje |
| Opakuje sa, kým platí podmienka. | Prechádza cez prvky zoznamu alebo rozsah čísel |
| Napr. opakované pokusy o generáciu unikátneho mena. | Napr. výpis všetkých položiek v zozname. |
Syntax cyklu for
Cyklus for má v Pythone
nasledovný zápis:
for premenna in kolekcia:
# Kód, ktorý sa vykoná pre každý prvok
Namiesto premenna si
napíšeš akýkoľvek názov (často sa používa i, j, k, ak sa jedná o čísla alebo názov prvku, napr. ak prechádzame zoznam suradnice, tak nazveme túto premennú suradnica.) Toto je iteračná premenná, ktorá bude v každom opakovaní (iterácii) obsahovať aktuálny
prvok zoznamu/rozsahu čísiel. kolekcia je nejaký zoznam, rozsah čísel (funkcia range())
alebo textový reťazec.
Funkcia range() - opakovanie kódu viackrát
Ak chceme cyklus for
spustiť určitý počet krát (napríklad 5-krát alebo pre čísla od 1 do 10),
využijeme na to funkciu range(). Táto funkcia nám vytvorí nejaký rozsah čísiel, ktorým vieme potom prechádzať.
Funkcia range() vie pracovať s
1, 2 alebo 3 argumentmi:
print("range(stop)")
# range(stop) - čísla od 0 po stop-1
for i in range(5):
print(i)
# Vypíše: 0, 1, 2, 3, 4
# range(stop) - čísla od 0 do hodnoty premennej koniec-1
koniec = 3
for j in range(koniec):
print(j)
# Vypíše: 0, 1, 2
print("range(start, stop)")
# range(start, stop) - čísla od start po stop-1
for cislo in range(1, 6):
print(cislo)
# Vypíše: 1, 2, 3, 4, 5
print("range(start, stop, krok)")
# range(start, stop, krok) - čísla od start po stop-1 s krokom
for i in range(0, 10, 2):
print(i)
# Vypíše: 0, 2, 4, 6, 8
# range(start, stop, krok)
for j in range(0, 100, 10):
print(j)
# Vypíše 0, 10, 20, 30, 40, 50, 60, 70, 80, 90
Všimni si!
- Funkcia
range()nikdy nevypíše číslo stop - vždy sa zastaví o jedno skôr. Napríkladrange(1, 6)vypíše čísla 1, 2, 3, 4, 5, ale nie 6. - Ak chceš ísť od 1 do 10 vrátane, napíš
range(1, 11).
Príklad: odpočítavanie od 5 do 1
for i in range(5, 0, -1):
print(i)
print("Štart!")
Prechádzanie zoznamu
Cyklus for je ideálny na
prechádzanie zoznamov. Stačí za kľúčové slovo in napísať názov zoznamu -
cyklus prejde každý prvok jeden po druhom.
mena = ["Anna", "Saša", "Veronika", "Miša"]
for meno in mena:
print(meno)
Premenná meno obsahuje v
každom opakovaní cyklu iný prvok zoznamu - najprv "Anna", potom
"Saša", a tak ďalej. Keď prejde všetky prvky, cyklus sa ukončí.
Príklad: sčítanie všetkých čísel v zozname
cisla = [10, 20, 30, 40, 50]
sucet = 0
# sucet začína ako 0, prejdeme každým prvkom v zozname
# a pripočítame jeho hodnotu do premennej sucet.
# Takto budeme mať súčet všetkých čísiel.
for cislo in cisla:
sucet += cislo
print("Súčet: " + str(sucet))
Prechádzanie zoznamu pomocou range() a indexu
Niekedy potrebujeme v cykle
vedieť aj index aktuálneho prvku, nielen jeho hodnotu. V takom prípade
môžeme použiť range() spolu s funkciou len():
mena = ["Anna", "Saša", "Veronika"]
for i in range(len(mena)):
print(str(i) + ". " + mena[i])
V príklade vyššie prechádzame všetkými prvkami (číslami) rozsahu čísiel od 0 do len(mena). Vieme, že indexovanie začína od 0, takže takýmto spôsobom vytvoríme rozsah indexov všetkých prvkov v zozname.
Zopakuj si!
- Cyklus
forsa používa vtedy, keď vieš vopred, koľkokrát (alebo čím všetkým) chceš prejsť. - Funkcia
range()vytvára rozsah čísiel. - Pozor:
range(1, 6)vygeneruje čísla 1, 2, 3, 4, 5 - stop číslo nie je zahrnuté. - Cyklus
forje ideálny na prechádzanie zoznamov. V každom opakovaní obsahuje iteračná premenná hodnotu aktuálneho prvku. - Ak potrebuješ aj index aktuálneho prvku, použi
range(len(zoznam))a pristupuj cezzoznam[i].
for i in range(3):
print(i)
for i in range(2, 8, 2):
print(i)
range(2, 8, 2) vygeneruje čísla 2, 4, 6. Číslo 8 nie je zahrnuté, pretože range() sa vždy zastaví pred hodnotou stop.
range().
range(4)
range(1, 5)
range(0, 10, 3)
range(5, 0, -1)
ovocie = ["jablko", "hruška", "slivka"]
for i in range(len(ovocie)):
print(ovocie[1])
ovocie[1] vždy vráti druhý prvok "hruška", bez ohľadu na to, kde sa v cykle práve nachádzame. Toto je trochu chyták, nakoľko tu iteračná premenná nemá žiadne využitie.
for?
for sa hodí vtedy, keď vieme vopred, koľkokrát (alebo čím všetkým) chceme prejsť. Čakanie na správne heslo alebo na udalosť je typický prípad pre while.
range()
len()
for ... in ...
cisla = [10, 20, 30]
for cislo in cisla:
print("hodnota=" + str(cislo))
cisla s int
hodnotami 5, 15, 32 a 59.Prejdi týmto zoznamom pomocou cyklu
for a vypíš do konzoly každý prvok zoznamu vo formáte „i. cislo=X“, kde namiesto i vypíšeš poradové číslo tohto prvku v zozname (čísluj od 1, nie 0!) a namiesto X použiješ hodnotu aktuálneho prvku.Napríklad:
cisla = [3, 19, 100]Výstup:
1. číslo=3
2. číslo=19
3. číslo=100