ebSkola

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.

2.4.15. Veido modulāras programmas un funkcijas.

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.

  1. Ieraksti def sasveicinaties():.
  2. Ieraksti zem tā ar atkāpi print("Sveiks, spēlētāj!").
  3. Palaid failu un pieraksti, kas parādījās terminālī.
  4. Pievieno faila beigās bez atkāpes rindu sasveicinaties().
  5. Palaid vēlreiz un salīdzini rezultātu.
  6. 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.

  1. Ieraksti def paradit_punktus(komanda, punkti, soda_punkti):.
  2. Izrēķini funkcijā rezultats = punkti - soda_punkti.
  3. Pievieno pārbaudi: ja rezultāts ir mazāks par 0, uzstādi to uz 0.
  4. Izdrukā funkcijā rezultātu ar f-string, izmantojot komanda.
  5. Izsauc funkciju ar paradit_punktus("Lāči", 50, 10).
  6. 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.

  1. Izsauc funkciju ar paradit_punktus("Vilki", 30, 5).
  2. Izsauc to vēlreiz ar paradit_punktus("Lapsas", 10, 40).
  3. Pārbaudi, vai otrajā gadījumā rezultāts ir 0, nevis negatīvs.
  4. Izsauc funkciju ar tikai diviem argumentiem un izlasi kļūdu.
  5. Pieraksti, kā sauc šo kļūdu.
  6. Salabo izsaukumu, pievienojot trūkstošo argumentu.
  7. 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.

  1. Nomaini definīciju uz def paradit_punktus(komanda, punkti, soda_punkti=0):.
  2. Izsauc funkciju ar diviem argumentiem: paradit_punktus("Bebri", 25).
  3. Pārbaudi, vai tagad kļūdas vairs nav.
  4. Izsauc vēlreiz ar trim argumentiem un pārliecinies, ka arī tas strādā.
  5. 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 def rindas 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)
1. grupa pabeidz prezentāciju un iegūst 30 punktus.
2. grupa pabeidz mini testu un iegūst 0 punktus.