Učíme sa Python – časť 4. (opakovanie a for cyklus)

0

Táto časť je z veľkej časti hlavne o opakovaní toho, čo je spomenuté už v predošlých častiach. Na konci si však ukážeme, ako môžeme docieliť to, aby sa náš kód vykonal niečo viac krát za sebou – predstavíme si for cyklus.

Opakovanie

Na začiatok si dajme nejaké úlohy na zopakovanie toho, čo sa dialo v predošlých častiach.

1. Napíšte funkciu, ktorá vráti True, ak je človek starší ako 18 rokov (alebo 18 ročný), inak vráti False. Vek človeka je parametrom tejto funkcie. Pri skúšaní programu načítajte vek človeka pomocou funkcie input().
BONUS: prepíšte funkciu tak, aby mala iba jeden riadok :-O

2. Napíšte funkciu, ktorá zistí (vráti True alebo False), či je človek starší ako je nejaká hranica. Hranica a aj vek človeka sú parametrami funkcie. Táto funkcia môže mať využitie napr. keď chceme zistiť, či si môže človek kúpiť alkohol v Amerike, alebo v Nemecku (v Amerike ja hranica 21 rokov, v Nemecku 16). Na testovanie si vytvor dve premenné hranicaUS a hranicaDE, ktoré budú mať hodnotu 21 resp. 16 rokov.

Pred tým, než ukážem riešenia týchto úloh si najprv zopakujme základné veci o funkciách a ich parametroch. Prvá dôležitá vec je tá, že funkcie z úloh majú mať jeden resp. dva parametre. Z predošlých častí si môžeme spomenúť na to, ako vyzerá funkcia:

def nazovFunkcie(parameter1, parameter2, parameter3):
    print("Hello")

Po názve funkcie nasledujú v zátvorkách parametre funkcie. Týchto parametrov môže byť viacero (nie len tri, ale aj viac, treba to však brať s mierou). Parametre sú premenné, ktoré sú dostupné iba v rámci danej funkcie. Mimo funkcie k týmto premenným nemáme prístup. Keď funkciu voláme, tak za tieto parametre musíme dosadiť nejakú hodnotu:

premenna1 = 10
premenna2 = 20
premenna3 = 30

nazovFunkcie(premenna1, premenna2, premenna3)

Nemusíme si na tento účel vytvárať premenné, ale môžeme do funkcie poslať priamo konštanty:

nazovFunkcie(10, 20, 30)

Pri zavolaní funkcie jej parametre nadobnú hodnotu, ktorú sme do nich poslali. Na demonštráciu si konečne ukážme riešenie prvej úlohy:

def jeClovekDospely(vek_cloveka):
    if vek_cloveka >= 18:
        return True
    else:
        return False

def jeClovekDospelyShort(vek_cloveka):
    return vek_cloveka >= 18

vek_pouzivatela = int(input("Zadaj svoj vek: "))

vysledok = jeClovekDospely(vek_pouzivatela)
if vysledok:
    print("CG, si dospely")
else:
    print("Sorry bro, este nie si dospely")

Tu je možné vidieť, ako fungujú parametre. Do funkcie posielame vek_pouzivatela, ktorý sme načítali pomocou funkcie input. Vo funkcii potom všade, kde sa používa parameter vek_cloveka, bude namiesto toho dosadená hodnota premennej vek_pouzivatela. Všimni si aj riešenie na jeden riadok. Na riešení druhej úlohy skúsim ešte raz zdôrazniť, ako fungujú parametre funkcie:

def jeClovekStarsiAko(vek_cloveka, hranica): 
    return vek_cloveka >= hranica

hranicaUS = 21
hranicaDE = 18

vek_pouzivatela = int(input("Zadaj svoj vek: "))

moze_pit_v_US = jeClovekStarsiAko(vek_pouzivatela, hranicaUS)
moze_pit_v_DE = jeClovekStarsiAko(vek_pouzivatela, hranicaDE)

Funkcia je veľmi podobná, ako funkcia z prvej úlohy. Zmena je akurát v tom, že sme pridali parameter hranica a tento parameter aj dosadíme tam, kde pred tým bolo číslo 18. Vďaka tomu, že hranica je parametrom funkcie, môžeme teraz funkciu využiť na viac vecí. Nie len na to, či človek môže piť v USA alebo v Nemecku, ale aj namiesto funkcie z prvej úlohy. Takto jednoducho:

hranica_dospelost = 18

je_dospely = jeClovekStarsiAko(vek_pouzivatela, hranica_dospelost)

Keď funkciu takto zavoláme, tak za parameter hranica bude dosadená hodnota premennej hranica_dospelosti – 18. A tak sa nám z tejto funkcie stáva aj riešenie úlohy číslo 1 a má oveľa viac využití ako iba na určovanie dospelosti. Pomocou tej istej funkcie môžeme zistiť aj to, či je človek dostatočne starý na to, aby sa stal prezidentom SR – stačí iba za parameter hranica dosadiť číslo 40 (prezident SR musí mať min. 40 rokov):

moze_byt_prezident = jeClovekStarsiAko(vek_pouzivatela, 40)

Toľko k opakovaniu. Dúfam, že ti toto opakovanie trochu pomohlo pochopiť, ako fungujú parametre funkcií.

FOR cyklus

Aby si čo najrýchlejšie pochopil, na čo slúžia for cykly, skús vyriešiť tieto úlohy.

  1. Napíš funkciu, ktorá vypíše čísla od 0 po 5.
  2. Napíš funkciu, ktorá vypíše čísla od 0 po 10.
  3. Napíš funkciu, ktorá vypíše čísla od 0 po 100, alebo 1000, proste po ľubovoľné N.

Úloha 1 a 2 sa dajú bez problémov spraviť pomocou kopírovania. Myslím, že sa ale zhodneme na tom, že 1000 krát by sa nám to už kopírovať nechcelo. Naštastie to tak ani robiť nemusíme. Presne na tento účel nám pri programovaní slúžia for cykly. For cyklus je niečo, čo nám umožnuje vykonávať nejaký kus kódu X krát. X môže byť ľubovoľné číslo, ktoré zadáme do kódu, alebo to môže byť niečo zadané od používateľa, alebo to môže byť niečo závislé na niečom inom v kóde. Základná syntax vyzerá takto:

for cislo in range(0, 1000):
    print(cislo)

V Pythone nie sú for cykly zrovna najštastnejšie urobené, ale to nevadí. V preklade sa môže for cyklus čítať takto: „Pre číslo, ktoré nadobúda hodnotu v rozsahu od 0 po 1000 vykonaj toto:“.

Pozn. funkcia range vracia čísla od 0 po 1000. Posledné vrátene číslo je teda 999. 1000 nám už nevráti.

Premenná cislo môže mať akekoľvek meno. Najčastejšie sa však používa jednoduchý názov i (skôr z historických dôvodov a preto, že z angličtiny sa toto nazýva „iterovanie“). Skúsme si teda ukázať, ako by vyzerala funkcia, ktorá vypíše čísla od 0 po 5.

def vypis_0az5():
    for cislo in range(0, 5 + 1):
        print(cislo)

Ak chceme naozaj vypísať aj číslo 5, tak musíme to range funkcie pridať + 1. Takto by vyzerala funkcia, ktorá vypíše čísla od 0 po 10:

def vypis_0az10():
    for cislo in range(0, 10 + 1):
        print(cislo)

Skús sám porozmýšľať, ako by vyzerala funkcia, ktorá by vedela ísť po ľubovoľné N.

Nepozeraj hneď na riešenie, skús porozmýšľať!

No okej, tu je teda riešenie:

def vypis_0azN(n):
    for cislo in range(0, n + 1):
        print(cislo)

Stačilo funkcii dať parameter a namiesto čísel 5 alebo 10 dosadiť tento parameter. Vybavené. Čo ak však nechceme ísť od nuly? Čo ak chceme ísť napr. od 10 po N. Asi si si už všimol/la tú nulu, ktorú posielame ako prvý parameter do range funkcie. Presne túto nulu stačí nahradiť za nejaké iné čislo a budeme začínať od neho. My sme však šikovní a rovno si ukážeme, ako upraviť našu funkciu, aby vedela brať čísla od m po n:

def vypis_MazN(m, n):
    for cislo in range(m, n + 1):
        print(cislo)

Toto je teda for cyklus.  Na začiatok sa to možno nezdá až také užitočné, ale bez for cyklov by programovanie asi ani nemohlo existovať. Uvidíš neskôr 😉

Domáca úloha TU


Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.