5.2 Vārdnīcas
Stundas uzdevums: Piešķirt savam klases spēlētājam skaidru profilu. Apgūsi, kā izmantot vārdnīcas (dict), lai glabātu datus, kuriem var piekļūt pēc nosaukuma, nevis tikai pēc kārtas numura. Tas ir labs veids, kā aprakstīt spēlētāja punktus, izvēles un materiālus.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izveido un maini vārdnīcu · 2. uzdevums (~25 min) - uzbūvē spēlētāja profilu ar sarakstu iekšā · 3. uzdevums (~20 min) - pasargā kodu no KeyError. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver VS Code un izveido failu vardnicas.py. Noderēs 5.1 stundas saraksti - šoreiz tos liksi vārdnīcas iekšpusē.
Teorija: Vārdnīcas (Dictionary)
Vārdnīca ir datu kolekcija, kurā katram elementam ir unikāla atslēga (Key) un tai piesaistīta vērtība (Value). Tās definē, izmantojot figūriekavas {}.
| Darbība | Apraksts | Piemērs |
|---|---|---|
| Definēšana | Lieto { "atslēga": "vērtība" } |
p = {"hp": 100} |
| Piekļuve | Izmanto kvadrātiekavas un atslēgu. | print(p["hp"]) |
| Mainīšana | Piešķir jaunu vērtību esošai atslēgai. | p["hp"] = 90 |
| Pievienošana | Izveido jaunu, iepriekš nebijušu atslēgu. | p["punkti"] = 50 |
Saraksts vai Vārdnīca?
- Saraksts: Ja svarīga ir secība (piem., mantas somā, Top 10 spēlētāji).
- Vārdnīca: Ja svarīgs ir apraksts un parametri (piem., varoņa statuss, ieroča dati).
Praktiskie uzdevumi
1. uzdevums -
Izveido un maini vārdnīcu
Beigās tu pratīsi piekļūt datiem pēc nosaukuma, nevis pēc numura.
- Ieraksti
p = {"hp": 100, "punkti": 0}. - Izdrukā
p["hp"]. - Nomaini HP ar
p["hp"] = 90un izdrukā vēlreiz. - Pievieno jaunu atslēgu
p["limenis"] = 1. - Izdrukā visu vārdnīcu un saskaiti atslēgas.
- Pieraksti, ar ko piekļuve
p["hp"]atšķiras nosaraksts[0].
Gatavs, kad: vārdnīcā ir trīs atslēgas, un tu vari paskaidrot, kāpēc te lieto vārdu, nevis numuru.
2. uzdevums -
Uzbūvē spēlētāja profilu ar sarakstu iekšā
Beigās viens mainīgais glabās gan skaitļus, gan mantu sarakstu.
- Ieraksti vārdnīcu ar atslēgām
vards,punktiunmateriali. - Ieliec atslēgā
materialisarakstu ar vienu elementu. - Palielini punktus ar
profils["punkti"] += 5. - Pievieno mantu ar
profils["materiali"].append("uzlīme"). - Izdrukā profilu ar f-string vienā teikumā.
- Izdrukā mantu skaitu ar
len(profils["materiali"]). - Palaid un pārbaudi abus skaitļus.
Gatavs, kad: izvadē redzams gan palielinātais punktu skaits, gan divas mantas.
3. uzdevums -
Pasargā kodu no KeyError
Beigās programma neavarēs, ja atslēgas nav.
- Izdrukā neesošu atslēgu
profils["zelts"]un pieraksti kļūdu. - Nomaini to uz
profils.get("zelts")un palaid vēlreiz. - Pieraksti, ko izdrukāja
.get()neesošai atslēgai. - Nomaini uz
profils.get("zelts", 0)un palaid. - Pievieno pārbaudi
if "zelts" in profils:. - Palaid ar esošu un neesošu atslēgu.
- Pieraksti vienu secinājumu: kad lietot
.get(), kadin.
Gatavs, kad: kvadrātiekavas dod KeyError, bet .get() atgriež None vai tavu noklusējumu.
Papildu uzdevums - Izveido vārdnīcu vārdnīcā
Ja pamatdarbs ir gatavs, glabā vairākus spēlētājus vienā struktūrā.
- Izveido
speletaji = {}. - Pievieno
speletaji["Anna"] = {"punkti": 10}. - Pievieno vēl divus spēlētājus.
- Izdrukā Annas punktus ar
speletaji["Anna"]["punkti"]. - Palielini viena spēlētāja punktus un izdrukā visu struktūru.
Gatavs, kad: tu vari piekļūt konkrēta spēlētāja punktiem ar divām kvadrātiekavu pārīm.
Biežākās kļūdas:
1. KeyError: Tu mēģini piekļūt atslēgai, kuras nav vārdnīcā (pārbaudi drukas kļūdas!).
2. Figūriekavas: Definējam ar{}, bet piekļūstam datiem ar[].
3. Kolons vs Komats: Atslēgu no vērtības atdala:, bet pārus vienu no otra atdala,.
Koda piemērs
# Klases spēlētāja profils
profils = {
"vards": "Anna",
"punkti": 10,
"materiali": ["marķieris"]
}
# Punkti palielinās
profils["punkti"] += 5
# Pievienojam materiālu sarakstam, kas ir vārdnīcā
profils["materiali"].append("uzlīme")
print(f"{profils['vards']} tagad ir {profils['punkti']} punkti.")
print(f"Materiālu saturs: {profils['materiali']}")
Materiālu saturs: ['marķieris', 'uzlīme']