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.
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
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ā.
- Izveido failu
asp.pysavā krātuvē. - Ieraksti pirmajā rindā
import random. - Ieraksti
varianti = ["akmens", "skeres", "papirs"]. - Ieraksti
datora_gajiens = random.choice(varianti). - Izdrukā datora gājienu un palaid programmu piecas reizes.
- 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ā.
- Ieraksti
gajiens = input("Izvēlies: ").lower().strip(). - Uzraksti nosacījumu neizšķirtam: ja abi gājieni ir vienādi, izdrukā
Neizšķirts. - Uzraksti uzvaras nosacījumu akmenim: akmens pret šķērēm.
- Pievieno uzvaras nosacījumus arī šķērēm un papīram, izmantojot
or. - Pievieno
elsezaru, kas paziņo par datora uzvaru. - Palaid un izspēlē vismaz trīs raundus.
- 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.
- Ieliec visu spēli iekšā
while True:ciklā. - Pievieno izeju: ja ievadīts
stop, izdrukā atvadas unbreak. - Pievieno validāciju
if gajiens not in varianti:arcontinue. - Palaid un ievadi
banans- spēlei jāturpinās, nevis jāavarē. - Palaid un ievadi tukšu rindu, tad
AKMENSar lielajiem burtiem. - Veic commit ar ziņu
Pievieno akmens-skeres-papirs speliun push. - 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ā.
- Ieraksti pirms cikla
manas = 0undatora = 0. - Palielini attiecīgo skaitītāju katrā uzvaras zarā.
- Izdrukā pēc
breakgala rezultātu ar f-string. - Pievieno rindu, kas paziņo kopējo uzvarētāju.
- 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)
- Dators vienmēr izvēlas to pašu: izmanto
random.choice(varianti), nevis cietkodētu vērtību. - Nederīga ievade tiek vērtēta kā zaudējums: pirms tiesneša loģikas pārbaudi, vai ievade ir sarakstā.
- Spēle nebeidzas: komandai
stopjāizsaucbreak. - Loģika atkārtojas pārāk daudz: vispirms izveido skaidru uzvaras nosacījumu sarakstu vai komentāru shēmu.
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...
Dators izvēlējās: skeres
Tu uzvarēji! Akmens salauž šķēres.Izvēlies: stop
Paldies par spēli! Uz redzēšanos.