4.6 Noslēguma projekts: Skaitļu minētājs
Stundas uzdevums: Apvienot visas 4. tēmā apgūtās prasmes - funkcijas, parametrus, return, mainīgo tvērumu un moduļus - pilnvērtīgā termināļa skaitļu minēšanas spēlē.
70 min plāns: Ievads un kritēriju pārruna (~10 min) · 1. uzdevums (~15 min) - uzraksti salidzina() funkciju · 2. uzdevums (~25 min) - saliec spēles ciklu ar mājieniem · 3. uzdevums (~20 min) - pievieno mēģinājumu skaitu un iesniedz GitHub. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: šis ir 4. tēmas noslēguma projekts. Izmanto tikai apgūto: funkcijas, return, while ciklu un random. Noderēs 4.5 stundas shēma.
Teorija: funkcijas sadala spēli pārbaudāmās daļās
Dators izvēlas nejaušu skaitli no 1 līdz 100. Spēlētājs mēģina to uzminēt, ievadot skaitli terminālī. Pēc katra mēģinājuma spēle dod mājienu - vai patiesais skaitlis ir lielāks vai mazāks. Spēle beidzas, kad spēlētājs uzmin skaitli vai kad mēģinājumi izbeigušies (10 mēģinājumi). Beigās tiek parādīts mēģinājumu skaits.
def salidzina(minetais, patiesais):
if minetais < patiesais:
return "par mazu"
if minetais > patiesais:
return "par lielu"
return "trāpīts"
Darba uzdevuma gaita
1. solis: Funkciju projektēšana (1. līmenis)
- Izveido failu
spele.py. - Definē funkciju
izveido_skaitli(), kas arrandom.randint(1, 100)izveido un atgriež nejaušu skaitli. - Definē funkciju
salidzina(minetais, patiesais), kas atgriež teksta mājienu -"par lielu","par mazu"vai"trāpīts". - Definē galveno funkciju
spele(), kas izsauc abas iepriekšējās funkcijas un izvada mājienu.
2. solis: Cikls un mēģinājumu skaits (2. līmenis)
- Spēles funkcijā pievieno
whileciklu, kas atkārtojas, līdz spēlētājs uzmin skaitli vai sasniegts 10 mēģinājumu limits. - Saglabā mēģinājumu skaitu lokālā mainīgajā
megi, kuru palielini katrā cikla iterācijā. - Pēc spēles beigām izvadi rezultātu: cik mēģinājumos uzminēts vai paziņojumu, ka mēģinājumi izbeigušies.
- Pārbaudi, vai kods strādā ar dažādām spēlētāja stratēģijām (visi par lielu, visi par mazu, jaukti).
3. solis: Modularitāte un PEP 8 (3. līmenis)
- Sadali kodu divos failos:
main.py(palaiž spēli) unspele.py(visas spēles funkcijas). - Failā
main.pyizmantofrom spele import speleun izsaucspele(). - Pievieno katrai funkcijai īsu docstring, kas paskaidro tās mērķi.
- Pārbaudi kodu pret PEP 8: atstarpes, mainīgo nosaukumi snake_case, atkāpes 4 atstarpes.
- Saglabā darbu GitHub ar vismaz 3 jēgpilniem commit ziņojumiem.
Praktiskie uzdevumi
1. uzdevums -
Uzraksti salidzina() funkciju
Beigās viena funkcija pateiks, vai minējums ir par lielu, par mazu vai trāpīts.
- Izveido failu
minetajs.pysavā krātuvē. - Ieraksti
def salidzina(minetais, patiesais):. - Pievieno
if minetais < patiesais:unreturn "par mazu". - Pievieno
if minetais > patiesais:unreturn "par lielu". - Pievieno beigās
return "trāpīts". - Pārbaudi funkciju ar trim izsaukumiem:
salidzina(5, 10),salidzina(15, 10),salidzina(10, 10).
Gatavs, kad: trīs izsaukumi dod trīs dažādas atbildes, un neviens nedod None.
2. uzdevums -
Saliec spēles ciklu ar mājieniem
Beigās spēle dos mājienus, līdz spēlētājs uzmin skaitli.
- Ieraksti
import randomunpatiesais = random.randint(1, 100). - Uzraksti
while True:ciklu. - Nolasi ciklā
minetais = int(input("Min skaitli (1-100): ")). - Izsauc
atbilde = salidzina(minetais, patiesais). - Izdrukā atbildi un pievieno
break, ja tā irtrāpīts. - Palaid un izspēlē vienu pilnu spēli.
Gatavs, kad: spēle dod mājienus pēc katra minējuma un beidzas tieši tad, kad uzmini.
3. uzdevums -
Pievieno mēģinājumu skaitu un iesniedz GitHub
Beigās spēle pateiks, cik mēģinājumos tu tiki galā.
- Ieraksti pirms cikla
meginajumi = 0. - Palielini to par vienu katrā ciklā.
- Izdrukā pēc
breakmēģinājumu skaitu ar f-string. - Pievieno ierobežojumu: pēc 10 mēģinājumiem spēle beidzas ar zaudējumu.
- Palaid un pārbaudi abus scenārijus - uzvaru un zaudējumu.
- Veic commit ar ziņu
Pievieno skaitlu minetajuun push. - Iesniedz krātuves saiti skolotājam.
Gatavs, kad: spēle beidzas gan uzminot, gan pēc 10 mēģinājumiem, un fails ir redzams GitHub.
Papildu uzdevums - Pasargā spēli no burtiem
Ja pamatdarbs ir gatavs, neļauj nepareizai ievadei spēli nogāzt.
- Ieliec ievades rindu
tryblokā. - Pievieno
except ValueError:ar paziņojumu. - Pievieno
continue, lai spēle turpinātos. - Pārliecinies, ka nederīgs mēģinājums netiek skaitīts.
- Palaid un ievadi
abc, tad parastu skaitli.
Gatavs, kad: burtu ievade dod paziņojumu un spēle turpinās, nezaudējot mēģinājumu.
Biežākās kļūdas (un kā tās labot)
- Funkcija drukā, bet neatgriež vērtību: salīdzināšanas funkcijai jālieto
return. - Mainīgais pazūd ārpus funkcijas: atceries, ka lokālie mainīgie dzīvo tikai funkcijā.
- Imports nestrādā: pārbaudi failu nosaukumus un to, vai tie atrodas vienā mapē.
- Cikls nekad nebeidzas: pārbaudi uzvaras un mēģinājumu limita nosacījumus.
Vērtēšanas kritēriji
| Kritērijs | Sācis apgūt (1-3) | Turpina apgūt (4-6) | Apguvis (7-8) | Apguvis padziļināti (9-10) |
|---|---|---|---|---|
Funkcijas un return |
Programma uzrakstīta vienā kodu blokā bez funkcijām. | Lieto vienu funkciju, bet vērtības tiek nodotas caur globāliem mainīgajiem. | Lieto vairākas funkcijas ar parametriem un return; mainīgie ir lokāli. |
Funkcijas ir universālas (var mainīt skaitļu robežas un mēģinājumu limitu kā parametrus). |
| Cikli un sazarojumi | Cikls darbojas neparedzami vai izraisa kļūdu. | Cikls strādā, bet pārtraukšanas nosacījumi ir kļūdaini. | Cikls korekti pārtrauc darbību pie pareizās atbildes vai mēģinājumu izbeigšanās. | Pievienotas papildu pārbaudes (piem., neskaitliska ievade) bez programmas avārijas. |
| Modularitāte un stils | Viens fails, nav PEP 8 ievērošanas. | Sadalīts vairākos failos, bet imports vai struktūra nepilnīga. | Pareiza moduļu sadarbība, atbilst PEP 8, pievienoti docstring. | Profesionāla struktūra: tipi (type hints), izvērsti komentāri, GitHub ar 3+ commit. |
Pašpārbaudes saraksts
- Programma startē, palaižot tikai
main.py. - Katra funkcija veic tikai vienu darbību (princips "viena funkcija - viens uzdevums").
- Spēle pēc katra mēģinājuma sniedz mājienu (par lielu / par mazu / trāpīts).
- Spēles beigās tiek izvadīts mēģinājumu skaits.
- Visi funkciju nosaukumi ir snake_case un atspoguļo darbību.
- GitHub vēsture satur vismaz 3 saturīgus commit.