Stundas uzdevums: Izveidot "Slavas zāli", kas atceras visus spēlētājus. Apgūsi, kā Read-Modify-Write ciklu: nolasīt esošos rezultātus no JSON faila, pievienot jaunu ierakstu, sakārtot tos pēc punktiem un saglabāt TOP 5 labākos rezultātus.
SR 2.4.14. (Datu struktūru kārtošana un JSON)70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
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ļā.
JSON faili nav kā parasts teksta dokuments, kuram var vienkārši "pierakstīt klāt" rindas beigās. Tie ir vienoti datu objekti (parasti liels saraksts ar vārdnīcām). Lai tos pareizi papildinātu, jāievēro trīs soļi:
[]."w" režīmu.Kad sarakstā atrodas vārdnīcas, Python nezina, pēc kura "stabiņa" (atslēgas) veikt kārtošanu. Mums ir jādod instrukcija:
$$key=lambda\ x:\ x['punkti']$$
Tas pasaka: "Apskati katru elementu (x) un kārtošanai izmanto tā vērtību pie atslēgas 'punkti'."
Š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.4 Rezultātu tabulas; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
temats = "6.4 Rezultātu tabulas"
print("Iesildīšanās:", temats)
print("Pirmais rezultāts:", 2 + 3)
main.py failā un palaid no termināļa.Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.
punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.
1. Datu pārrakstīšana: Ja Tu aizmirsti vispirms nolasīt esošos datus (1. solis), katrs jauns spēlētājs izdzēsīs visus iepriekšējos, atstājot failā tikai vienu ierakstu.
2. Kārtošana kā tekstam: Ja punktus saglabāsi kā tekstu (piem.,"9"), kārtojot tas tiks uzskatīts par "lielāku" nekā"100"(jo 9 ir lielāks par 1 alfabētā). Vienmēr lietoint()!
3. Neērti lasāms JSON: Saglabājot failu, vienmēr lietojson.dump(dati, f, indent=4), lai fails būtu strukturēts un viegli pārbaudāms.
import json
# 1. Mēģinām nolasīt datus
try:
with open("scores.json", "r", encoding="utf-8") as f:
top_saraksts = json.load(f)
except FileNotFoundError:
top_saraksts = [] # Ja faila nav, sākam ar tukšu lapu
# 2. Pievienojam jaunu rezultātu
jauns = {"vards": "Drosmīgais", "punkti": 150}
top_saraksts.append(jauns)
# 3. Sakārtojam un atstājam tikai TOP 5
top_saraksts.sort(key=lambda x: x['punkti'], reverse=True)
top_saraksts = top_saraksts[:5]
# Saglabājam atpakaļ failā
with open("scores.json", "w", encoding="utf-8") as f:
json.dump(top_saraksts, f, indent=4)