4.5 Spēles plānošana ar shēmām
Stundas uzdevums: Analizēt "Skaitļu minētāja" spēles gaitu, izstrādāt vizuālu algoritma shēmu un sasaistīt to ar konkrētām funkcijām pirms koda rakstīšanas.
70 min plāns: Teorija un paraugs (~10 min) · 1. uzdevums (~15 min) - uzzīmē skaitļu minētāja shēmu · 2. uzdevums (~25 min) - pārvērs shēmu funkcijās · 3. uzdevums (~20 min) - salīdzini shēmu ar kodu un salabo neatbilstības. Papildu uzdevumu sāc tikai tad, ja pārējie trīs ir gatavi.
Pirms sāc: atver projekta README.md. Vispirms izveidosi shēmas aprakstu README.md failā un tikai 2. uzdevumā atvērsi VS Code.
Teorija: Algoritma shēmu simboli
Pirms koda rakstīšanas algoritmu vizualizē shēmā. Katrs simbols Python kodā nozīmē konkrētu konstrukciju.
| Simbols | Nozīme shēmā | Atbilstība Python kodā |
|---|---|---|
| Ovāls | Sākuma vai beigu punkts | Programmas sākums / return |
| Taisnstūris | Darbība vai aprēķins | Funkcijas izsaukums vai piešķiršana |
| Paralelograms | Ievade / izvade | input() / print() |
| Rombs | Lēmums (jā/nē) | if / elif / else |
| Bulta | Plūsmas virziens | Koda izpildes secība |
Cikli shēmā tiek attēloti kā bulta atpakaļ uz iepriekšējo soli ar lēmuma rombu, kas pārtrauc vai turpina ciklu - tas atbilst Python while ciklam.
Praktiskie uzdevumi
1. uzdevums -
Uzzīmē skaitļu minētāja shēmu
Beigās tev būs attēls, pēc kura var uzrakstīt visu spēli.
- Uzzīmē ovālu ar vārdu
Sākums. - Uzzīmē taisnstūri ar darbību
Izvēlas nejaušu skaitli. - Uzzīmē paralelogramu ar
Ievada minējumu. - Uzzīmē rombu ar jautājumu
Vai minējums = skaitlis?. - Novelc no romba divas bultas:
jāuz beigām,nēatpakaļ uz ievadi. - Uzzīmē ovālu ar vārdu
Beigas.
Gatavs, kad: shēmā ir vismaz viens rombs ar divām izejošām bultām, un viena no tām ved atpakaļ uz augšu.
2. uzdevums -
Pārvērs shēmu funkcijās
Beigās katra shēmas figūra būs kļuvusi par koda rindu vai funkciju.
- Izveido failu
minetajs.pyun ierakstiimport random. - Uzraksti funkciju
def izveido_skaitli():, kas atgriežrandom.randint(1, 100). - Uzraksti funkciju
def viens_meginajums(patiesais):, kas nolasa ievadi. - Ieraksti tajā salīdzinājumu un atgriez
trāpīts,par mazuvaipar lielu. - Izsauc abas funkcijas un izdrukā rezultātu.
- Palaid un pārbaudi ar vienu minējumu.
Gatavs, kad: programma izvēlas skaitli un pēc viena minējuma pasaka vienu no trim atbildēm.
3. uzdevums -
Salīdzini shēmu ar kodu un salabo neatbilstības
Beigās tavs kods darīs tieši to, kas uzzīmēts shēmā.
- Noliec shēmu blakus ekrānam.
- Pārbaudi, vai kodā ir cikls, kas atbilst bultai atpakaļ uz augšu.
- Pievieno
while True:ciklu, ja tā trūkst. - Pievieno
break, kad atbilde irtrāpīts. - Palaid un spēlē, līdz uzmini skaitli.
- Atzīmē shēmā ar krāsu tās figūras, kurām kodā nav atbilstības.
- Pieraksti vienu secinājumu: kāpēc vieglāk labot shēmu nekā gatavu kodu.
Gatavs, kad: spēle turpinās, līdz uzmini skaitli, un katrai shēmas figūrai vari parādīt koda rindu.
Papildu uzdevums - Pievieno mēģinājumu ierobežojumu
Ja pamatdarbs ir gatavs, papildini shēmu un kodu ar mēģinājumu skaitītāju.
- Uzzīmē shēmā otru rombu ar jautājumu
Vai mēģinājumi beigušies?. - Ieraksti kodā pirms cikla
meginajumi = 10. - Samazini to katrā ciklā par vienu.
- Pārtrauc ciklu, kad mēģinājumi sasniedz 0.
- Izdrukā paziņojumu par zaudējumu.
Gatavs, kad: spēle beidzas arī tad, ja neuzmini - pēc desmitā mēģinājuma.
Biežākās kļūdas
- Bezgalīgs cikls: Aizmirsta
megi += 1rinda - programma nekad neapstājas. Vienmēr pārbaudi, vai kāds mainīgais maina pārtraukšanas nosacījumu. - Aklie zari: Romba zars iziet "nekur" - vienmēr katra zara galā jābūt nākamai darbībai vai beigu ovālam.
- Nedefinēts mainīgais: Programmā tiek lasīts mainīgais (piem.,
patiesais), kas vēl nav izveidots - definē to pirms cikla.
Koda piemērs: No shēmas uz kodu
import random
def izveido_skaitli():
return random.randint(1, 100)
def viens_meginajums(patiesais):
minetais = int(input("Min skaitli (1-100): "))
if minetais == patiesais:
return "trāpīts"
elif minetais < patiesais:
return "par mazu"
return "par lielu"
patiesais = izveido_skaitli()
megi = 0
while megi < 10:
rezultats = viens_meginajums(patiesais)
print(rezultats)
megi += 1
if rezultats == "trāpīts":
break
par lielu
Min skaitli (1-100): 25
par mazu
Min skaitli (1-100): 37
trāpīts