4. tēma: 4.4 Lokālie/globālie mainīgie un vārdnīcas

Tavs šīs stundas izaicinājums: Diferencēt mainīgo redzamību programmā, izmantot vārdnīcas kompleksu datu glabāšanai un optimizēt spēles tēla īpašību pārvaldību.

2.4.13. Lieto mainīgos, datu tipus un pamatkonstrukcijas.
2.4.16. Lieto saliktas datu struktūras (saraksti, vārdnīcas).

Teorija: Scope un Dictionaries

Lai veidotu sarežģītas spēles, mums jāzina, kur mainīgie "dzīvo" un kā efektīvi glabāt tēla statistiku.

Variable Scope (Mainīgo tvērums)

zelts = 100 # Globāls

def veikt_pirkumu():
    cena = 20 # Lokāls (ārpus funkcijas neeksistē)
    print(f"Iztērēti {cena}")

Dictionaries (Vārdnīcas) {}

Dictionary ir datu struktūra, kas glabā informāciju pāros: Key (Atslēga) : Value (Vērtība). Tas ir ideāls veids, kā glabāt spēlētāja statistiku vienuviet.

# Vārdnīcas izveide
speletajs = {"vards": "Artūrs", "hp": 100, "limenis": 5}

# Piekļūšana vērtībai pēc atslēgas
print(speletajs["vards"]) # Izvada: Artūrs

# Vērtības atjaunināšana
speletajs["hp"] -= 10

1. uzdevums: Lokālā "pazušana"

Eksperimentē ar mainīgo tvērumu, lai saprastu, kāpēc funkcijas iekšienē radīti mainīgie nav pieejami galvenajā programmā.

Izpildes soļi:

  1. VS Code izveido failu tverums.py.
  2. Definē funkciju uzbrukums(). Funkcijas iekšpusē izveido mainīgo bojajums = 25 un izdrukā to.
  3. Ārpus funkcijas (galvenajā programmā) izsauc funkciju uzbrukums().
  4. Mēģini ārpus funkcijas izdrukāt mainīgo bojajums.
  5. Novēro NameError terminālī. Pieraksti komentārā virs kļūdas, kāpēc tas notika.

2. uzdevums: Varoņa datu karte (Dictionary)

Aizstāj vairākus atsevišķus mainīgos ar vienu strukturētu vārdnīcu un izmanto to funkcijās.

Izpildes soļi:

  1. Izveido failu statistika.py.
  2. Izveido globālu vārdnīcu varonis ar atslēgām: "vards", "hp", "speks", "zelts" un piešķir tām sākuma vērtības.
  3. Definē funkciju paradi_datus(tels), kas saņem vārdnīcu kā parametru un glīti izdrukā visus datus, izmantojot f-string.
  4. Izsauc funkciju, padodot tai savu varonis vārdnīcu.
  5. Programmas beigās izmaini varoņa zelta daudzumu (varonis["zelts"] += 50) un izsauc funkciju vēlreiz, lai redzētu izmaiņas.

3. uzdevums: Spēles inventāra datubāze

Izveido funkciju, kas meklē informāciju vārdnīcā un atgriež (return) datus galvenajai programmai.

Izpildes soļi:

  1. Izveido failu veikals.py.
  2. Izveido vārdnīcu cenradis, kur atslēgas ir priekšmetu nosaukumi (piem., "Zobens", "Vairogs"), bet vērtības — to cenas (int).
  3. Definē funkciju pirkt_lietu(nosaukums).
  4. Funkcijas iekšienē pārbaudi, vai nosaukums eksistē vārdnīcā (izmanto if nosaukums in cenradis:).
  5. Ja eksistē, atgriez cenu, ja nē — atgriez 0.
  6. Galvenajā programmā pieprasi lietotājam ievadīt priekšmetu, izsauc funkciju un paziņo cenu vai informē, ka tāda nav.
  7. Iesūtīt uzdevuma github saiti e-klasē.

Papildus uzdevums: Lokālo mainīgo prioritāte

Izpēti situāciju, kad globālais un lokālais mainīgais saucas vienādi (Shadowing).

Izpildes soļi:

  1. Izveido failu prioritate.py.
  2. Faila sākumā definē vards = "Globālais".
  3. Definē funkciju mainit_vardu(), kuras iekšpusē nodefinē vards = "Lokālais" un izdrukā to.
  4. Izsauc funkciju un pēc tam vēlreiz izdrukā vards ārpus funkcijas.
  5. Pievieno komentāru ar skaidrojumu, kāpēc globālais mainīgais neizmainījās, un kādā situācijā būtu jāizmanto return, lai atgrieztu jauno vērtību.

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

Koda piemērs: Vārdnīca un Funkcija

# Globālie dati
ienaidnieks = {"tips": "Orks", "hp": 50}

def sanemt_bojajumu(tels, punkti):
    """Samazina tēla hp par norādīto punktu skaitu."""
    tels["hp"] = tels["hp"] - punkti
    print(f"{tels['tips']} saņēma triecienu!")

# Izsaukums
sanemt_bojajumu(ienaidnieks, 15)
print(f"Atlikušais HP: {ienaidnieks['hp']}")
Orks saņēma triecienu!
Atlikušais HP: 35
⬅ Iepriekšējā stunda Nākamā stunda ➡