›_ ebskola.lv
← 4.5

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

Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.

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.

70 min plāns: funkciju projektēšana ~25 min, cikls un mēģinājumi ~25 min, modularitāte un GitHub ~20 min.

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 - Iesildies ar gatavu piemēru

Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 4.6 Noslēguma projekts: Skaitļu minētājs; detalizētu izpratni veidosi nākamajos uzdevumos.

Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.

def salidzina(minetais, patiesais):
    if minetais < patiesais:
        return "par mazu"
    if minetais > patiesais:
        return "par lielu"
    return "trāpīts"
  1. Atver darba failu vai rīku. Python fragmentu ievieto main.py failā un palaid no termināļa.
  2. Nokopē visu piemēra bloku no šī uzdevuma un ielīmē to norādītajā vietā.
  3. Palaid kodu tieši tādu, kāds tas ir, un pārliecinies, ka parādās rezultāts, izvade vai vismaz nav kļūdas paziņojuma.
  4. Atrodi vienu drošu vietu, ko drīkst mainīt: tekstu, skaitli, krāsu, mainīgā vērtību vai testa ierakstu.
  5. Maini tikai šo vienu vērtību un palaid kodu vēlreiz.
  6. Salīdzini rezultātu pirms un pēc izmaiņas. Ja parādās kļūda, atcel pēdējo izmaiņu un palaid vēlreiz.
  7. Turpini pie 2. uzdevuma tikai tad, kad šis mazais piemērs darbojas.

2. uzdevums - Ievieto algoritmu projektā

Pievieno šīs stundas paņēmienu kā nelielu, strādājošu projekta daļu.

  1. Izvēlies vienu konkrētu projekta vietu: ievadi, aprēķinu, izvēli, ciklu, datu struktūru, funkciju vai rezultāta izvadi.
  2. Nosauc funkcijas un mainīgos pēc to lomas, piemēram, punkti, gajiens, atbilde, rezultats vai parbauda_ievadi().
  3. Uzraksti funkciju vai koda bloku, kas nolasa sākuma datus, tos apstrādā un atgriež vai izvada rezultātu.
  4. Savieno šo kodu ar jau esošo projekta plūsmu, nevis atstāj to atsevišķā demonstrācijā.
  5. Pievieno vienu īsu komentāru pie sarežģītākās darbības.
  6. Pārbaudi, ka iepriekšējais kods joprojām darbojas pēc jaunā fragmenta pievienošanas.
  7. Salabo pirmo atrasto kļūdu pirms paplašini risinājumu.
  8. Veic Git commit ar īsu ziņu par pievienoto funkcionalitāti.

3. uzdevums - Testē kodu un izdari secinājumu

Pārbaudi, vai algoritms darbojas paredzami vairākās situācijās.

  1. Izveido trīs testa scenārijus: parasta ievade, robežgadījums un kļūdaina vai tukša ievade.
  2. Palaid parasto scenāriju un pārbaudi termināļa izvadi.
  3. Palaid robežgadījumu ar mazāko, lielāko vai tukšāko vērtību, ko šis kods var saņemt.
  4. Palaid kļūdaino scenāriju un pārbaudi, vai programma neavarē.
  5. Izlabo vienu konkrētu problēmu kodā, datos vai ievades pārbaudē.
  6. Pārbaudi labojumu vēlreiz ar visiem trim scenārijiem.
  7. Beigās pieraksti vienu secinājumu: kura koda rinda vai algoritma solis vislabāk palīdzēja saprast tēmu 4.6 Noslēguma projekts: Skaitļu minētājs.

Papildu uzdevums - Pievieno mazu funkciju

Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu programmētu uzlabojumu.

  1. Izvēlies vienu mazu papildinājumu, kas izmanto to pašu šīs stundas paņēmienu.
  2. Pievieno vienu jaunu mainīgo, funkciju, nosacījumu, ciklu, datu elementu vai rezultāta izvadi.
  3. Savieno papildinājumu ar esošo projekta kodu.
  4. Pārbaudi, ka pamatfunkcija un papildinājums darbojas kopā.
  5. Saglabā izmaiņas ar Git commit tikai pēc veiksmīgas pārbaudes.

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

⬅ Iepriekšējā stunda Tēmas apkopojums ➡