›_ ebskola.lv
← 6.5

6.6 Noslēguma projekts: Quiz spēle ar Highscore

Stundas uzdevums: Apvienot 6. tēmā apgūto failu lasīšanu, rakstīšanu, JSON un CSV apstrādi vienkāršā Quiz spēlē ar saglabātiem labākajiem rezultātiem.

SR 2.4.17. Darbs ar failiem un ārējām datu krātuvēm SR 2.4.4. Iegūst, atlasa un apstrādā datus SR 2.4.5. Datu analīze un vizualizācija

Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.

Teorija: dati atrodas ārpus koda

Programma sākumā nolasa jautājumus no jautajumi.json faila - katrā ierakstā ir jautājuma teksts, atbilžu varianti un pareizās atbildes indekss. Spēlētājs ievada savu vārdu un atbild uz 5 nejauši izvēlētiem jautājumiem. Pēc spēles rezultāts (vārds, punkti) tiek pievienots highscore.csv failam. Visbeidzot tiek izvadīts TOP 5 spēlētāju saraksts.

with open("highscore.csv", "a", encoding="utf-8") as fails:
    fails.write(f"{vards},{punkti}\n")

with open("jautajumi.json", "r", encoding="utf-8") as fails:
    jautajumi = json.load(fails)
Iepriekš apgūts: failu režīmi, with open, JSON un CSV rindas.

70 min plāns: JSON ielāde ~20 min, spēles cikls ~25 min, CSV highscore un README ~25 min.

Darba uzdevuma gaita

1. solis: Datu ielāde no JSON (1. līmenis)

  1. Failā jautajumi.json izveido vismaz 10 jautājumus formātā:
    [
      {"jautajums": "Cik ir 2+2?", "varianti": ["3","4","5"], "pareiza": 1},
      ...
    ]
  2. Failā data.py izveido funkciju ielade_jautajumus(), kas atver JSON ar with open() un atgriež sarakstu.
  3. Pārbaudi, ka print(ielade_jautajumus()) izdrukā jautājumus.

2. solis: Spēles cikls (2. līmenis)

  1. Failā spele.py izveido funkciju spele_quiz(jautajumi, vards).
  2. Ar random.sample(jautajumi, 5) izvēlies 5 nejaušus jautājumus.
  3. Ar for ciklu rādi katru jautājumu, ievāc atbildi un palielini punktus, ja atbilde pareiza.
  4. Funkcija atgriež iegūtos punktus.

3. solis: Highscore saglabāšana CSV (3. līmenis)

  1. Failā highscore.py izveido saglaba(vards, punkti), kas pievieno rindu CSV failam (mode "a").
  2. Izveido paradi_top(), kas nolasa CSV, sakārto pēc punktiem dilstošā secībā un izvada TOP 5.
  3. Failā main.py savieno visu: ielādē jautājumus, palaiž spēli, saglabā rezultātu, parāda TOP 5.
  4. Pievieno README.md ar palaišanas instrukciju un JSON formāta aprakstu.
  5. GitHub vēsturē ir vismaz 4 saturīgi commit.

Praktiskie uzdevumi

1. uzdevums - Iesildies ar gatavu piemēru

Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 6.6 Noslēguma projekts: Quiz spēle ar Highscore; detalizētu izpratni veidosi nākamajos uzdevumos.

Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.

[
  {"jautajums": "Cik ir 2+2?", "varianti": ["3","4","5"], "pareiza": 1},
  ...
]
  1. Atver darba failu vai rīku. Python fragmentu ievieto main.py failā un palaid no termināļa.
  2. Nokopē visu piemēra bloku no šī uzdevuma un ielīmē to norādītajā vietā.
  3. Palaid kodu tieši tādu, kāds tas ir, un pārliecinies, ka parādās rezultāts, izvade vai vismaz nav kļūdas paziņojuma.
  4. Atrodi vienu drošu vietu, ko drīkst mainīt: tekstu, skaitli, krāsu, mainīgā vērtību vai testa ierakstu.
  5. Maini tikai šo vienu vērtību un palaid kodu vēlreiz.
  6. Salīdzini rezultātu pirms un pēc izmaiņas. Ja parādās kļūda, atcel pēdējo izmaiņu un palaid vēlreiz.
  7. Turpini pie 2. uzdevuma tikai tad, kad šis mazais piemērs darbojas.

2. uzdevums - Ievieto algoritmu projektā

Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.

  1. Izvēlies vienu konkrētu projekta vietu: ievadi, aprēķinu, izvēli, ciklu, datu struktūru, funkciju vai rezultāta izvadi.
  2. Nosauc funkcijas un mainīgos pēc to lomas, piemēram, punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().
  3. Uzraksti funkciju vai koda bloku, kas nolasa sākuma datus, tos apstrādā un atgriež vai izvada rezultātu.
  4. Savieno šo kodu ar jau esošo projekta plūsmu, nevis atstāj to atsevišķā demonstrācijā.
  5. Pievieno vienu īsu komentāru pie sarežģītākās darbības.
  6. Pārbaudi, ka iepriekšējais kods joprojām darbojas pēc jaunā fragmenta pievienošanas.
  7. Salabo pirmo atrasto kļūdu pirms paplašini risinājumu.
  8. Veic Git commit ar īsu ziņu par pievienoto funkcionalitāti.

3. uzdevums - Testē kodu un izdari secinājumu

Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.

  1. Izveido trīs testa scenārijus: parasta ievade, robežgadījums un kļūdaina vai tukša ievade.
  2. Palaid parasto scenāriju un pārbaudi termināļa izvadi.
  3. Palaid robežgadījumu ar mazāko, lielāko vai tukšāko vērtību, ko šis kods var saņemt.
  4. Palaid kļūdaino scenāriju un pārbaudi, vai programma neavarē.
  5. Izlabo vienu konkrētu problēmu kodā, datos vai ievades pārbaudē.
  6. Pārbaudi labojumu vēlreiz ar visiem trim scenārijiem.
  7. Beigās pieraksti vienu secinājumu: kura koda rinda vai algoritma solis vislabāk palīdzēja saprast tēmu 6.6 Noslēguma projekts: Quiz spēle ar Highscore.

Papildu uzdevums - Pievieno mazu funkciju

Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.

  1. Izvēlies vienu mazu papildinājumu, kas izmanto to pašu šīs stundas paņēmienu.
  2. Pievieno vienu jaunu mainīgo, funkciju, nosacījumu, ciklu, datu elementu vai rezultāta izvadi.
  3. Savieno papildinājumu ar esošo projekta kodu.
  4. Pārbaudi, ka pamatfunkcija un papildinājums darbojas kopā.
  5. Saglabā izmaiņas ar Git commit tikai pēc veiksmīgas pārbaudes.

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

Vērtēšanas kritēriji

Kritērijs Sācis (1-3) Turpina (4-6) Apguvis (7-8) Padziļināti (9-10)
JSON ielāde Jautājumi ievietoti tieši kodā. JSON tiek nolasīts, bet bez kļūdu pārbaudes. Lieto with open() un kods darbojas ar dažādiem JSON failiem. Pievienota validācija (try/except), ja JSON formāts kļūdains.
Spēles cikls Cikls neizpildās vai izraisa kļūdu. Cikls strādā, bet punktu skaitīšanā ir kļūda. Cikls korekti rāda jautājumus un skaita punktus. Pievienots laika ierobežojums vai bonusa punkti.
CSV pastāvība Rezultāts netiek saglabāts. Rezultāts tiek pārrakstīts katru reizi. Rezultāts tiek pievienots, TOP 5 tiek pareizi sakārtots. Veikta papildu analīze (vidējais punktu skaits, statistika).
Modularitāte un Git Viens fails, viens commit. Vairāki faili, bet imports nepilnīgs. Sadalīts 3+ moduļos, PEP 8, 4+ commit. Profesionāls README, type hints, izvērsta Git vēsture.

Pašpārbaudes saraksts

Koda piemērs: JSON ielāde

import json

def ielade_jautajumus(fails="jautajumi.json"):
    """Nolasa jautājumus no JSON faila un atgriež sarakstu."""
    with open(fails, "r", encoding="utf-8") as f:
        return json.load(f)

jautajumi = ielade_jautajumus()
print(f"Ielādēti {len(jautajumi)} jautājumi.")
Ielādēti 10 jautājumi.
⬅ Iepriekšējā stunda Tēmas apkopojums ➡