4.1 Funkciju definēšana un parametri
Stundas uzdevums: Izprast funkciju darbības principus un izveidot atkārtoti lietojamus koda blokus ar parametriem, lai strukturētu un optimizētu savas spēles loģiku.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - uzraksti pirmo funkciju bez parametriem · 2. uzdevums (~25 min) - pievieno parametrus punktu rēķinātājam · 3. uzdevums (~20 min) - izsauc funkciju vairākas reizes ar dažādiem datiem. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un izveido failu funkcijas.py. Atceries: funkcija sāk darboties tikai tad, kad to izsauc, nevis kad to uzraksti.
Teorija: Funkcijas anatomija
Programmai kļūstot garākai, vienādu koda bloku rakstīšana no jauna ir neefektīva. Functions (Funkcijas) ir kā receptes – tās nodefinē vienreiz, bet izsauc jebkurā brīdī un neierobežotu skaitu reižu.
- def (Define/Definēt): Atslēgvārds, kas norāda jaunas funkcijas izveidi. Nosaukumu vēlams veidot kā darbības vārdu, izmantojot Snake Case.
- Parameters (Parametri): Mainīgie iekavās, kas kalpo kā ieejas dati funkcijas "ķermenim".
# Funkcijas definēšana ar parametru def sasveicinaties(vards): print(f"Sveiks, {vards}!") - Indentation (Atkāpe): Kods, kas pieder funkcijai, obligāti jāiebīda pa labi (izmantojot Tab).
- Function Call (Funkcijas izsaukums): Lai funkcija reāli nostrādātu, tā ir jāizsauc, iekavās padodot Arguments (Argumentus) jeb reālas vērtības.
# Funkcijas izsaukšana galvenajā programmā sasveicinaties("Spēlētāj") # Izvada: Sveiks, Spēlētāj!
Praktiskie uzdevumi
1. uzdevums -
Uzraksti pirmo funkciju bez parametriem
Beigās viena rinda izsauks veselu koda bloku.
- Ieraksti
def sasveicinaties():. - Ieraksti zem tā ar atkāpi
print("Sveiks, spēlētāj!"). - Palaid failu un pieraksti, kas parādījās terminālī.
- Pievieno faila beigās bez atkāpes rindu
sasveicinaties(). - Palaid vēlreiz un salīdzini rezultātu.
- Pievieno vēl divus izsaukumus un palaid.
Gatavs, kad: bez izsaukuma neizdrukājas nekas, bet ar trim izsaukumiem - tieši trīs rindas.
2. uzdevums -
Pievieno parametrus punktu rēķinātājam
Beigās viena funkcija apkalpos jebkuru komandu un jebkurus punktus.
- Ieraksti
def paradit_punktus(komanda, punkti, soda_punkti):. - Izrēķini funkcijā
rezultats = punkti - soda_punkti. - Pievieno pārbaudi: ja rezultāts ir mazāks par 0, uzstādi to uz 0.
- Izdrukā funkcijā rezultātu ar f-string, izmantojot
komanda. - Izsauc funkciju ar
paradit_punktus("Lāči", 50, 10). - Palaid un pārbaudi izdruku.
Gatavs, kad: izvadē ir komandas nosaukums un skaitlis 40.
3. uzdevums -
Izsauc funkciju vairākas reizes ar dažādiem datiem
Beigās tu redzēsi, ka viena funkcija aizstāj daudz kopēta koda.
- Izsauc funkciju ar
paradit_punktus("Vilki", 30, 5). - Izsauc to vēlreiz ar
paradit_punktus("Lapsas", 10, 40). - Pārbaudi, vai otrajā gadījumā rezultāts ir 0, nevis negatīvs.
- Izsauc funkciju ar tikai diviem argumentiem un izlasi kļūdu.
- Pieraksti, kā sauc šo kļūdu.
- Salabo izsaukumu, pievienojot trūkstošo argumentu.
- Pieraksti vienu secinājumu: kāpēc argumentu skaitam jāsakrīt ar parametru skaitu.
Gatavs, kad: visi trīs izsaukumi strādā, negatīvs rezultāts nekad neparādās, un tu zini TypeError iemeslu.
Papildu uzdevums - Pievieno noklusējuma vērtību
Ja pamatdarbs ir gatavs, padari vienu parametru neobligātu.
- Nomaini definīciju uz
def paradit_punktus(komanda, punkti, soda_punkti=0):. - Izsauc funkciju ar diviem argumentiem:
paradit_punktus("Bebri", 25). - Pārbaudi, vai tagad kļūdas vairs nav.
- Izsauc vēlreiz ar trim argumentiem un pārliecinies, ka arī tas strādā.
- Pieraksti, kad noklusējuma vērtība ir noderīga.
Gatavs, kad: funkciju var izsaukt gan ar diviem, gan ar trim argumentiem, un abos gadījumos tā strādā.
Biežākās kļūdas (un kā tās labot):
- IndentationError (Atkāpju kļūda): Kods zem
defrindas nav nobīdīts pa labi. Funkcijas ķermenis drīkst saturēt tikai atbilstoši iebīdītas rindas.# Slikti: def sveiciens(): print("Sveiks!") # Labi: def sveiciens(): print("Sveiks!") - TypeError (Tipa kļūda jeb nepareizs argumentu skaits): Tu izsauc funkciju, nenorādot vajadzīgos datus, vai norādot pārāk daudz datu. Parametru skaitam jāprecīzi sakrīt.
# Slikti: def statuss(vards, punkti): print(vards) statuss("Anna") # Trūkst 'punkti' argumenta # Labi: statuss("Anna", 100) - NameError (Vārda kļūda): Tu mēģini izsaukt funkciju pirms tā ir definēta koda augšpusē. Python lasa kodu no augšas uz leju.
# Slikti: mans_sveiciens() def mans_sveiciens(): print("Sveiks!") # Labi: def mans_sveiciens(): print("Sveiks!") mans_sveiciens()
Koda piemērs: Funkciju definēšana un izsaukšana
# 1. Funkcijas definēšana (receptes sagatavošana)
def aprekinat_un_paradit_punktus(komanda, uzdevums, punkti, soda_punkti):
rezultats = punkti - soda_punkti
if rezultats < 0:
rezultats = 0
print(f"{komanda} pabeidz {uzdevums} un iegūst {rezultats} punktus.")
# 2. Funkcijas izsaukšana (gatavošana praksē)
aprekinat_un_paradit_punktus("1. grupa", "prezentāciju", 50, 20)
aprekinat_un_paradit_punktus("2. grupa", "mini testu", 30, 40)
2. grupa pabeidz mini testu un iegūst 0 punktus.