ebSkola

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.

SR 2.4.1. Analizē problēmu un veic dekompozīciju SR 2.4.6. Plāno un dokumentē izstrādes procesu

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.

SimbolsNozīme shēmāAtbilstība Python kodā
OvālsSākuma vai beigu punktsProgrammas sākums / return
TaisnstūrisDarbība vai aprēķinsFunkcijas izsaukums vai piešķiršana
ParalelogramsIevade / izvadeinput() / print()
RombsLēmums (jā/nē)if / elif / else
BultaPlūsmas virziensKoda 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.

  1. Uzzīmē ovālu ar vārdu Sākums.
  2. Uzzīmē taisnstūri ar darbību Izvēlas nejaušu skaitli.
  3. Uzzīmē paralelogramu ar Ievada minējumu.
  4. Uzzīmē rombu ar jautājumu Vai minējums = skaitlis?.
  5. Novelc no romba divas bultas: jā uz beigām, nē atpakaļ uz ievadi.
  6. 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.

  1. Izveido failu minetajs.py un ieraksti import random.
  2. Uzraksti funkciju def izveido_skaitli():, kas atgriež random.randint(1, 100).
  3. Uzraksti funkciju def viens_meginajums(patiesais):, kas nolasa ievadi.
  4. Ieraksti tajā salīdzinājumu un atgriez trāpīts, par mazu vai par lielu.
  5. Izsauc abas funkcijas un izdrukā rezultātu.
  6. 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ā.

  1. Noliec shēmu blakus ekrānam.
  2. Pārbaudi, vai kodā ir cikls, kas atbilst bultai atpakaļ uz augšu.
  3. Pievieno while True: ciklu, ja tā trūkst.
  4. Pievieno break, kad atbilde ir trāpīts.
  5. Palaid un spēlē, līdz uzmini skaitli.
  6. Atzīmē shēmā ar krāsu tās figūras, kurām kodā nav atbilstības.
  7. 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.

  1. Uzzīmē shēmā otru rombu ar jautājumu Vai mēģinājumi beigušies?.
  2. Ieraksti kodā pirms cikla meginajumi = 10.
  3. Samazini to katrā ciklā par vienu.
  4. Pārtrauc ciklu, kad mēģinājumi sasniedz 0.
  5. 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 += 1 rinda - 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
Min skaitli (1-100): 50
par lielu
Min skaitli (1-100): 25
par mazu
Min skaitli (1-100): 37
trāpīts