4. tēma: 4.1 Funkciju definēšana un parametri

Tavs šīs stundas izaicinājums: 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.

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.

1. uzdevums: Pirmais sveiciens

Izveido savu pirmo bāzes funkciju bez parametriem un integrē to programmas plūsmā, izmantojot ciklu.

Izpildes soļi:

  1. VS Code izveido failu funkcijas_pamati.py.
  2. Definē jaunu funkciju: def sveiciens():.
  3. Funkcijas iekšienē (ar atkāpi) izvadi tekstu: print("Sveiks, ceļotāj! Tavs piedzīvojums sākas.").
  4. Palaid kodu. Ievēro, ka terminālis ir pilnīgi tukšs, jo funkcija tika definēta, bet ne izsaukta.
  5. Ārpus funkcijas bloka (bez atkāpes koda kreisajā malā) ieraksti: sveiciens() un palaid failu.
  6. Izmanto for vai while ciklu, lai izsauktu šo funkciju trīs reizes pēc kārtas.

2. uzdevums: Personalizēts ziņojums

Izmanto parametrus, lai padarītu funkcijas darbību dinamisku un pielāgojamu dažādām situācijām.

Izpildes soļi:

  1. Izveido failu parametri.py.
  2. Definē funkciju ar diviem parametriem: def paradi_statusu(vards, dzivibas):.
  3. Funkcijas iekšpusē izvadi tekstu, izmantojot f-string formatēšanu: print(f"Spēlētājs: {vards} | Dzīvības: {dzivibas}").
  4. Galvenajā programmā (ārpus funkcijas atkāpes) izsauc funkciju pirmo reizi, iekavās norādot sava varoņa vārdu (kā tekstu) un skaitli 100.
  5. Izsauc to pašu funkciju otro reizi, bet šoreiz iekavās norādi ienaidnieka vārdu un skaitli 50.
  6. Palaid programmu un pārliecinies, ka funkcija spēj apstrādāt dažādus argumentus, izmantojot vienu un to pašu kodu.

3. uzdevums: Istabu aprakstītājs ar "Typewriter" efektu

Uzraksti sarežģītāku funkciju, kas izmanto ciklu un laika moduli teksta dinamiskai attēlošanai ekrānā.

Izpildes soļi:

  1. Izveido failu cyoa_scrolling.py.
  2. Faila pašā augšā importē nepieciešamos moduļus: import time, sys.
  3. Definē ritināšanas funkciju:
    def druka_lenam(teksts):
        for simbols in teksts:
            print(simbols, end="", flush=True)
            time.sleep(0.05) # Pauze starp burtiem
        print() # Pāreja jaunā rindā teksta beigās
  4. Definē galveno apraksta funkciju: def apraksti_vietu(nosaukums, apraksts):.
  5. Funkcijas apraksti_vietu iekšpusē vispirms izvadi rāmīti (piem., print("===========")), pēc tam izsauc savu jauno funkciju druka_lenam(apraksts), pabeidzot ar vēl vienu rāmīti apakšā.
  6. Izsauc apraksti_vietu() ar nosaukumu un garāku stāsta fragmentu.
  7. Iesūtīt uzdevuma github saiti e-klasē.

Papildus uzdevums: Vizuālās veselības joslas zīmētājs (HP Bar)

Apvieno funkciju parametrus ar matemātiskajiem operatoriem, lai ģenerētu vizuālus elementus.

Izpildes soļi:

  1. Izveido failu hp_josla.py.
  2. Definē funkciju zime_hp_joslu(vards, hp_punkti).
  3. Funkcijas iekšienē izveido mainīgo simbolu_skaits, kas iegūts, veseli dalot (//) hp_punkti ar 10.
  4. Python ļauj reizināt tekstu ar skaitli. Uzzīmē joslu: josla = "█" * simbolu_skaits.
  5. Izvadi ekrānā f-string ar spēlētāja vārdu, pašu joslu un HP punktiem iekavās.
  6. Izsauc funkciju vairākas reizes dažādiem personāžiem (piemēram, ar 100 HP, 45 HP un 15 HP), lai redzētu vizuālo atšķirību.

Biežākās kļūdas (un kā tās labot):

Koda piemērs: Funkciju definēšana un izsaukšana

# 1. Funkcijas definēšana (receptes sagatavošana)
def aprekinat_un_paradit_zaudejumus(uzbrucejs, aizstavis, speks, brunas):
    bojajums = speks - brunas
    if bojajums < 0:
        bojajums = 0
    print(f"{uzbrucejs} uzbrūk! {aizstavis} zaudē {bojajums} veselības punktus.")

# 2. Funkcijas izsaukšana (gatavošana praksē)
aprekinat_un_paradit_zaudejumus("Pūķis", "Bruņinieks", 50, 20)
aprekinat_un_paradit_zaudejumus("Bruņinieks", "Pūķis", 30, 40)
Pūķis uzbrūk! Bruņinieks zaudē 30 veselības punktus.
Bruņinieks uzbrūk! Pūķis zaudē 0 veselības punktus.
⬅ Iepriekšējā stunda Nākamā stunda ➡