ebSkola

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.

SR 2.4.14. (Vārdnīcu lietošana un datu tipi)

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.

  1. Ieraksti p = {"hp": 100, "punkti": 0}.
  2. Izdrukā p["hp"].
  3. Nomaini HP ar p["hp"] = 90 un izdrukā vēlreiz.
  4. Pievieno jaunu atslēgu p["limenis"] = 1.
  5. Izdrukā visu vārdnīcu un saskaiti atslēgas.
  6. Pieraksti, ar ko piekļuve p["hp"] atšķiras no saraksts[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.

  1. Ieraksti vārdnīcu ar atslēgām vards, punkti un materiali.
  2. Ieliec atslēgā materiali sarakstu ar vienu elementu.
  3. Palielini punktus ar profils["punkti"] += 5.
  4. Pievieno mantu ar profils["materiali"].append("uzlīme").
  5. Izdrukā profilu ar f-string vienā teikumā.
  6. Izdrukā mantu skaitu ar len(profils["materiali"]).
  7. 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.

  1. Izdrukā neesošu atslēgu profils["zelts"] un pieraksti kļūdu.
  2. Nomaini to uz profils.get("zelts") un palaid vēlreiz.
  3. Pieraksti, ko izdrukāja .get() neesošai atslēgai.
  4. Nomaini uz profils.get("zelts", 0) un palaid.
  5. Pievieno pārbaudi if "zelts" in profils:.
  6. Palaid ar esošu un neesošu atslēgu.
  7. Pieraksti vienu secinājumu: kad lietot .get(), kad in.

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ā.

  1. Izveido speletaji = {}.
  2. Pievieno speletaji["Anna"] = {"punkti": 10}.
  3. Pievieno vēl divus spēlētājus.
  4. Izdrukā Annas punktus ar speletaji["Anna"]["punkti"].
  5. 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']}")
Anna tagad ir 15 punkti.
Materiālu saturs: ['marķieris', 'uzlīme']