ebSkola

3.6 Noslēguma projekts: "Gudrais Akmens-Šķēres-Papīrīts"

Stundas uzdevums: Izveidot kļūdu izturīgu "Akmens-Šķēres-Papīrīts" spēli, izmantojot tikai 3. tēmā apgūto: if/elif/else, loģiskos operatorus, while ciklu, break/continue, sarakstus un ievades validāciju.

SR 2.4.10. Atkļūdošana un testēšana SR 2.4.13. Pamatkonstrukcijas un datu tipi SR 2.4.14. Vadības struktūras SR 2.4.16. Saliktas datu struktūras

70 min plāns: Ievads un kritēriju pārruna (~10 min) · 1. uzdevums (~15 min) - uzbūvē spēles kodolu ar random · 2. uzdevums (~25 min) - pievieno tiesnesi ar if/elif/else · 3. uzdevums (~20 min) - pievieno ciklu, validāciju un iesniedz GitHub. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.

Pirms sāc: šis ir 3. tēmas noslēguma projekts. Izmanto tikai apgūto: sarakstus, if/elif/else, loģiskos operatorus, while, break un continue.

Teorija: tiesnesis, cikls un validācija

Spēlei vajadzīgas trīs pazīstamas daļas. Saraksts glabā atļautās izvēles, random.choice() izvēlas datora gājienu, bet if/elif/else salīdzina spēlētāja un datora izvēli. while True ļauj spēlēt vairākus raundus, bet continue pasargā spēli no nepareizas ievades.

varianti = ["akmens", "skeres", "papirs"]

gajiens = input("Izvēlies: ").lower().strip()
if gajiens not in varianti:
    print("Nederīga izvēle.")
    continue
Iepriekš apgūts: saraksts, input, lower/strip, if un continue.

Praktiskie uzdevumi

1. uzdevums -

Uzbūvē spēles kodolu ar random

Beigās dators izvēlēsies savu gājienu, un tu to redzēsi ekrānā.

  1. Izveido failu asp.py savā krātuvē.
  2. Ieraksti pirmajā rindā import random.
  3. Ieraksti varianti = ["akmens", "skeres", "papirs"].
  4. Ieraksti datora_gajiens = random.choice(varianti).
  5. Izdrukā datora gājienu un palaid programmu piecas reizes.
  6. Pieraksti, vai katru reizi iznāca tas pats vārds.

Gatavs, kad: palaižot programmu vairākas reizes, datora gājiens mainās, nevis paliek nemainīgs.

2. uzdevums -

Pievieno tiesnesi ar if/elif/else

Beigās spēle pateiks, kurš uzvarēja konkrētajā raundā.

  1. Ieraksti gajiens = input("Izvēlies: ").lower().strip().
  2. Uzraksti nosacījumu neizšķirtam: ja abi gājieni ir vienādi, izdrukā Neizšķirts.
  3. Uzraksti uzvaras nosacījumu akmenim: akmens pret šķērēm.
  4. Pievieno uzvaras nosacījumus arī šķērēm un papīram, izmantojot or.
  5. Pievieno else zaru, kas paziņo par datora uzvaru.
  6. Palaid un izspēlē vismaz trīs raundus.
  7. Pārbaudi ar roku, vai tiesnesis nosprieda pareizi.

Gatavs, kad: visos trīs raundos rezultāts sakrīt ar to, ko pats nospriestu pēc spēles noteikumiem.

3. uzdevums -

Pievieno ciklu, validāciju un iesniedz GitHub

Beigās spēli varēs spēlēt vairākas reizes, un nepareiza ievade to neizjauks.

  1. Ieliec visu spēli iekšā while True: ciklā.
  2. Pievieno izeju: ja ievadīts stop, izdrukā atvadas un break.
  3. Pievieno validāciju if gajiens not in varianti: ar continue.
  4. Palaid un ievadi banans - spēlei jāturpinās, nevis jāavarē.
  5. Palaid un ievadi tukšu rindu, tad AKMENS ar lielajiem burtiem.
  6. Veic commit ar ziņu Pievieno akmens-skeres-papirs speli un push.
  7. Iesniedz krātuves saiti skolotājam.

Gatavs, kad: spēle iztur nederīgu ievadi, beidzas ar stop, un fails ir redzams GitHub.

Papildu uzdevums - Pievieno rezultātu tabulu

Ja pamatdarbs ir gatavs, saskaiti uzvaras visas spēles garumā.

  1. Ieraksti pirms cikla manas = 0 un datora = 0.
  2. Palielini attiecīgo skaitītāju katrā uzvaras zarā.
  3. Izdrukā pēc break gala rezultātu ar f-string.
  4. Pievieno rindu, kas paziņo kopējo uzvarētāju.
  5. Palaid un izspēlē piecus raundus.

Gatavs, kad: pēc stop ievadīšanas programma parāda abu punktu skaitu un kopējo uzvarētāju.

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

Snieguma līmeņa apraksts (Vērtēšanas tabula)

Kritēriji Sācis apgūt (1-3) Turpina apgūt (4-6) Apguvis (7-8) Apguvis padziļināti (9-10)
Loģika un Nejaušība Dators izvēlas fiksētu gājienu vai loģikā ir kļūdas. Izmantots random, bet spēles rezultāti mēdz būt neprecīzi. Precīza tiesneša loģika un veiksmīga random.choice integrācija. Nevainojama loģika, izmantoti loģiskie operatori koda optimizācijai.
Cikli un Validācija Programma izpildās vienreiz vai avarē pie kļūdainas ievades. Cikls darbojas, bet kļūdaina ievade netiek pilnībā apstrādāta. Lietots while True un break. Programma ir izturīga pret kļūdām. Izmantoti try/except, continue un kompleksi validācijas filtri.
Koda kvalitāte Nav atkāpju, mainīgo nosaukumi ir neskaidri (a, b, c). Kods ir lasāms, bet trūkst konsekvences stila ievērošanā. Ievērots Snake Case. Svarīgākās daļas ir komentētas. Kods ir elegants, profesionāli strukturēts un pašdokumentējošs.
Git vēsture Nav Git vēstures vai tikai viens saglabāšanas punkts. Ir Git vēsture, bet ziņojumi ir neinformatīvi (piem., "fix"). Git vēsture rāda progresu (3+ punkti) ar skaidriem aprakstiem. Vēsture dokumentē loģisku izstrādes gaitu un funkciju pieaugumu.

Koda paraugs iedvesmai

# Profesionālas ievades un cikla kontroles piemērs
import random

varianti = ["akmens", "skeres", "papirs"]

print("--- LAIPNI LŪGTI SPĒLĒ ---")

while True:
    gajiens = input("\nIzvēlies (akmens, skeres, papirs vai stop): ").lower().strip()
    
    if gajiens == "stop":
        print("Paldies par spēli! Uz redzēšanos.")
        break
        
    if gajiens not in varianti:
        print("Kļūda! Lūdzu, raksti kādu no dotajiem variantiem.")
        continue
    
    dators = random.choice(varianti)
    print(f"Dators izvēlējās: {dators}")
    
    # Šeit turpini ar tiesneša loģiku...
Izvēlies: AKMENS
Dators izvēlējās: skeres
Tu uzvarēji! Akmens salauž šķēres.

Izvēlies: stop
Paldies par spēli! Uz redzēšanos.