ebSkola

6.2 Digitālais rīks

Stundas uzdevums: Nodalīt stāstu no koda. Apgūsi, kā izmantot Google Sheets, lai izveidotu strukturētu spēles pasauli, un eksportēt to CSV formātā. Tas ļaus Tev uzrakstīt 100 istabu spēli, nepievienojot nevienu jaunu Python funkciju!

SR 2.3.5. (Datu strukturēšana izklājlapās) un SR 2.4.1. (Sistēmas dekompozīcija) SR 2.3.1. Datorikas nozares attīstība un ietekme

70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - izveido stāsta tabulu izklājlapā · 2. uzdevums (~25 min) - eksportē to par CSV un nolasi ar DictReader · 3. uzdevums (~20 min) - pārbaudi, vai visas saites ved uz esošām lokācijām. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: atver Google Sheets un VS Code. CSV fails jāsaglabā tajā pašā mapē, kur ir tavs Python fails, citādi programma to neatradīs.

Teorija: Saturs pret Loģiku

Profesionālā spēļu izstrādē mēs cenšamies pēc modularitātes. Programmētājs uzbūvē "dzinēju" (Python kodu), bet rakstnieks sagatavo "degvielu" (Google Sheets stāstu).

Kā izskatās datubāzes modelis?

Kolonna (Galvene) Nozīme Piemērs
id Unikāls numurs katrai lokācijai. 1
teksts Kas notiek šajā vietā? Tu stāvi pie upes...
izvele_a Darbības nosaukums. Peldēt
merkis_a Kurp šī izvēle ved (Nākamās vietas ID)? 2

Praktiskie uzdevumi

1. uzdevums -

Izveido stāsta tabulu izklājlapā

Beigās tavs stāsts dzīvos tabulā, nevis Python kodā.

  1. Izveido jaunu Google Sheets izklājlapu.
  2. Ieraksti pirmajā rindā galvenes: id, teksts, izvele_a, merkis_a.
  3. Aizpildi pirmo lokāciju ar id 1 un īsu stāsta tekstu.
  4. Ieraksti izvēles nosaukumu un mērķa id, uz kuru tā ved.
  5. Pievieno vēl divas lokācijas ar id 2 un 3.
  6. Pārbaudi, vai neviens id neatkārtojas.

Gatavs, kad: tabulā ir 3 lokācijas ar unikāliem id un aizpildītām galvenēm.

2. uzdevums -

Eksportē to par CSV un nolasi ar DictReader

Beigās Python izdrukās tavu stāstu no tabulas.

  1. Izvēlies File -> Download -> Comma Separated Values (.csv).
  2. Pārsauc lejupielādēto failu par pasaule.csv.
  3. Pārvieto to savā projekta mapē blakus Python failam.
  4. Ieraksti kodā import csv.
  5. Atver failu ar with open('pasaule.csv', mode='r', encoding='utf-8') as f:.
  6. Izveido lasitajs = csv.DictReader(f) un izdrukā katru rindu ciklā.
  7. Palaid un salīdzini izdruku ar tabulu.

Gatavs, kad: terminālī izdrukājas trīs vārdnīcas, un to atslēgas sakrīt ar tavām galvenēm.

3. uzdevums -

Pārbaudi, vai visas saites ved uz esošām lokācijām

Beigās tu zināsi, vai spēlētājs var iekrist tukšumā.

  1. Izveido tukšu sarakstu visi_id = [].
  2. Pievieno ciklā katras rindas id šim sarakstam.
  3. Uzraksti otru ciklu, kas pārbauda katras rindas merkis_a.
  4. Izdrukā brīdinājumu, ja mērķis nav sarakstā visi_id.
  5. Ieraksti tabulā apzinātu kļūdu - mērķi 99.
  6. Eksportē CSV vēlreiz un palaid pārbaudi.
  7. Salabo kļūdu un pārliecinies, ka brīdinājums pazūd.

Gatavs, kad: programma pamana mērķi 99 kā nederīgu, bet pēc labojuma brīdinājumu vairs nerāda.

Papildu uzdevums - Pievieno otro izvēli

Ja pamatdarbs ir gatavs, ļauj spēlētājam izvēlēties starp diviem ceļiem.

  1. Pievieno tabulā kolonnas izvele_b un merkis_b.
  2. Aizpildi tās visām lokācijām.
  3. Eksportē CSV no jauna.
  4. Izdrukā kodā abas izvēles katrai lokācijai.
  5. Papildini saišu pārbaudi arī ar merkis_b.

Gatavs, kad: katrai lokācijai izdrukājas divas izvēles, un abu mērķi tiek pārbaudīti.

Biežākās kļūdas plānošanā:

1. "Aklie zari": Ja Tavā izvēlē mērķis ir ID 5, bet tabulā nav rindas, kas sākas ar ID 5, spēle šajā brīdī avarēs ar kļūdu.
2. Galveņu nesakritība: Python kodā Tu atsauksies uz kolonnu nosaukumiem (piem., rinda['izvele_a']). Ja tabulā ierakstīji "Izvele A", kods atgriezīs KeyError.
3. Komati tekstā: Ja stāstā lieto komatus, Google Sheets tos eksportējot automātiski ieliks pēdiņās. Python csv modulis to saprot, tāpēc droši lieto pieturzīmes stāstā!

Koda piemērs

import csv

# Atveram eksportēto failu
with open('pasaule.csv', mode='r', encoding='utf-8') as f:

    # DictReader pārvērš katru CSV rindu par Python vārdnīcu (dict),
    # kur atslēgas ir tabulas pirmās rindas (galveņu) nosaukumi.
    lasitajs = csv.DictReader(f)

    for rinda in lasitajs:
        print(f"ID: {rinda['id']} | Vieta: {rinda['nosaukums']}")
        print(f"Apraksts: {rinda['teksts'][:30]}...") # Izvada tikai pirmos 30 burtus
        print("-" * 20)
ID: 1 | Vieta: Krustceles
Apraksts: Tu stāvi uz putekļainas takas...
--------------------
ID: 2 | Vieta: Vecais mežs
Apraksts: Koki šeit aug tik cieši, ka...
--------------------