ebSkola

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ē.

SR 2.4.15. Modulāras programmas un funkcijas SR 2.4.14. Vadības struktūras (cikli, sazarojumi) SR 2.4.13. Mainīgie un datu tipi SR 2.4.10. Atkļūdošana un testēšana

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"
Funkcija saņem datus, atgriež rezultātu un nelasa ievadi pati.

Darba uzdevuma gaita

1. solis: Funkciju projektēšana (1. līmenis)

  1. Izveido failu spele.py.
  2. Definē funkciju izveido_skaitli(), kas ar random.randint(1, 100) izveido un atgriež nejaušu skaitli.
  3. Definē funkciju salidzina(minetais, patiesais), kas atgriež teksta mājienu - "par lielu", "par mazu" vai "trāpīts".
  4. 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)

  1. Spēles funkcijā pievieno while ciklu, kas atkārtojas, līdz spēlētājs uzmin skaitli vai sasniegts 10 mēģinājumu limits.
  2. Saglabā mēģinājumu skaitu lokālā mainīgajā megi, kuru palielini katrā cikla iterācijā.
  3. Pēc spēles beigām izvadi rezultātu: cik mēģinājumos uzminēts vai paziņojumu, ka mēģinājumi izbeigušies.
  4. 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)

  1. Sadali kodu divos failos: main.py (palaiž spēli) un spele.py (visas spēles funkcijas).
  2. Failā main.py izmanto from spele import spele un izsauc spele().
  3. Pievieno katrai funkcijai īsu docstring, kas paskaidro tās mērķi.
  4. Pārbaudi kodu pret PEP 8: atstarpes, mainīgo nosaukumi snake_case, atkāpes 4 atstarpes.
  5. 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.

  1. Izveido failu minetajs.py savā krātuvē.
  2. Ieraksti def salidzina(minetais, patiesais):.
  3. Pievieno if minetais < patiesais: un return "par mazu".
  4. Pievieno if minetais > patiesais: un return "par lielu".
  5. Pievieno beigās return "trāpīts".
  6. 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.

  1. Ieraksti import random un patiesais = random.randint(1, 100).
  2. Uzraksti while True: ciklu.
  3. Nolasi ciklā minetais = int(input("Min skaitli (1-100): ")).
  4. Izsauc atbilde = salidzina(minetais, patiesais).
  5. Izdrukā atbildi un pievieno break, ja tā ir trāpīts.
  6. 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ā.

  1. Ieraksti pirms cikla meginajumi = 0.
  2. Palielini to par vienu katrā ciklā.
  3. Izdrukā pēc break mēģinājumu skaitu ar f-string.
  4. Pievieno ierobežojumu: pēc 10 mēģinājumiem spēle beidzas ar zaudējumu.
  5. Palaid un pārbaudi abus scenārijus - uzvaru un zaudējumu.
  6. Veic commit ar ziņu Pievieno skaitlu minetaju un push.
  7. 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.

  1. Ieliec ievades rindu try blokā.
  2. Pievieno except ValueError: ar paziņojumu.
  3. Pievieno continue, lai spēle turpinātos.
  4. Pārliecinies, ka nederīgs mēģinājums netiek skaitīts.
  5. 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)

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