Lekcie
Cyklus for
Programy sú od toho, aby nám uľahčovali prácu a život. Presne na to je cyklus for - s týmto cyklusom vieme ľahko prejsť zoznamy, rozsahy čísel a viac.
Cyklus while vs. cyklus for
V predchádzajúcej lekcii sme sa naučili cyklus while. Spomeň si, ako funguje - opakuje blok kódu dovtedy, kým platí podmienka. Hodí sa vtedy, keď nevieš vopred, koľkokrát sa má kód opakovať.
Cyklus for funguje inak. Používa sa vtedy, keď vieš presne, 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 alebo rozsah čísel |
| Napr. čakanie na správne heslo. | 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š nejaký názov - táto premenná bude v každom opakovaní obsahovať aktuálny prvok. Namiesto kolekcia môže byť 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:
# 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 koniec-1
koniec = 3
for i in range(koniec):
print(i)
# Vypíše: 0, 1, 2
# range(start, stop) - čísla od start po stop-1
for i in range(1, 6):
print(i)
# Vypíše: 1, 2, 3, 4, 5
# 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
Všimni si!
- Funkcia range() nikdy nevypíše číslo stop - vždy sa zastaví o jedno skôr. Tento rozsah by sme mohli zapísať ako interval v matematike: Napríklad range(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])
Ak nepotrebuješ index, je prehľadnejšie a krajšie písať priamo for prvok in zoznam namiesto range(len(zoznam)). Používaj range + index len vtedy, keď index naozaj potrebuješ.
Zopakuj si!
- Cyklus for sa používa vtedy, keď vieš vopred, koľkokrát (alebo čím všetkým) chceš prejsť.
- Funkcia range() ti umožní opakovať kód určitý počet krát alebo prejsť rozsah čísel.
- Dôležité: range(1, 6) vygeneruje čísla 1, 2, 3, 4, 5 - stop číslo nie je zahrnuté.
- Cyklus for je 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 cez zoznam[i].
for i in range(3):
print(i)
for i in range(2, 8, 2):
print(i)
ovocie = ["jablko", "hruška", "slivka"]
for i in range(len(ovocie)):
print(ovocie[1])
cisla = [10, 20, 30]
for cislo in cisla:
print("hodnota=" + str(cislo))
Prejdi týmto zoznamom pomocou funkcie 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