Selles peatükis:
- uurime, miks on programme koostades kasulik planeerimisele aega kulutada,
- saad teada, mis on plokkskeem,
- saad soovi korral proovida ise programmi teha, kasutades seniseid oskusi (print(), int, ==, if, elif, else),
- saad teada, kuidas genereerida juhuslikku arvu,
- saad teada, kuidas kasutada while loop tsüklit,
- koostad lõbusa programmi päkapiku ja kingitustega.
Miks planeerimine on kasulik?
Eelmises õppetükis olid programmi koostamisel abiks harulised skeemid. Mida keerukam on Sinu programm, seda rohkem kasu annab taoline programmi samm-sammult läbi mõtlemine. Nii teed koodi kirjutades vähem vigu.
Eelmises õppetükis tegin skeemi PowerPointis SmartArt töövahendiga. Seekord proovin hoopis sellist töövahendit nagu Visio, mis kuulub samuti Microsoft Office’i töövahendite hulka. Visio abil saab kergesti koostada plokkskeeme, mis on väga head programmeerimise plaanimiseks.
Päkapiku kingiloos

Teen programmi, mis annab kasutajale valiku. Kuna jõulud pole mägede taga, siis saab mängija teada, et päkapikud juba piiluvad ja on toonud talle 3 kingipakki. Kasutaja saab valida neist ühe. Vastavalt tehtud valikule saab kasutaja kas kingituse või jääb tühjade kätega. Mängu saab kujutada järgneva skeemiga.

Pane tähele! Ovaalid tähistavad programmi algust või lõppu. Rombid on kas sisendid (input) või väljundid (output). Teemant näitab kasutaja valikut. Nooled aga tähistavad programmi kulgu.
Harjutus
Proovi nüüd luua oma mäng. Kõigepealt Shell aknas CTRL + N, et uus fail. Seejärel salvesta see kohe ära. Annan allpool koodi kirjutamiseks paar näpunäidet. Ära minu lõpplahendust kohe piilu vaid proovi soovitusi järgides koodi ise kirjutada.
Koodi kirjutamiseks:
- Kasuta 1-2 korda print(), et selgitada kasutajale, mis ta ülesanne on.
- Loo muutuja, mille abil kasutaja saab sisestada (input) mängu oma valiku.
- Lisa kui-funktsioon ehk if, mis määrab tingimuse juhul, kui kasutaja sisestab numbri, mis on võrdne 1-ga. (Mäletad, võrdne märgiti ==.
- Lisa print(), mis ütleb kasutajale, et ta võitis ja saab kingi.
- Lisa nüüd muul juhul ehk elif ja tingimus, kui kasutaja sisestab numbri, mis on võrdne 2-ga.
- Määra, et valiku 2 puhul prinditakse kasutajale, et ta kaotas.
- Lisa veel üks elif ja kasutaja valik, mis on võrdne numbriga 3.
- Ja veelkord paar print(), et teatada mängu kaotusest.
- Kõige lõppu tuleb panna else, mis määrab tegevuse siis, kui kasutaja sisestab 1, 2 või 3 asemel midagi muud.
- Else järel tuleb viimane print(), mis soovitab mängu uuesti käivitada.
Salvesta ja käivita (F5). Kui programm ei tööta, siis kontrolli, kas sul on kõik sulud ja jutumärgid olemas, kas muutuja nimi on korrektne, kas ikka kasutasid topelt võrdusmärke, kas if, elif ja else järel on koolon.
Lahendus
print("Peagi on jõulud. Päkapikud juba toimetavad!") print("Sinu ees on kolm kingitust. Vali neist üks!") pakiValik = input("Millise numbriga paki valid? Kas 1, 2 või 3?") if pakiValik == "1": print("Ohoo, kommikarp! Oled olnud kukkupai ja saad maiustada.") print("Mäng läbi. Sa leidsid kingituse üles ja võitsid!") elif pakiValik == "2": print("Assa, vana auklik sokk! Oled vist teinud vallatust.") print("Mäng läbi. Sa ei saanud kinki ja kaotasid!") elif pakiValik == "3": print("Oi, oi! See pakk on tühi!") print("Päkapikud toovad kinke ainult headele lastele.") print("Mäng läbi. Sa ei saanud kinki ja KAOTASID!") else: print("Sa ei tunne numbreid ja pakki ei saa!") print("Käivita mäng uuesti ja vali järgmine kord pakk 1, 2 või 3!")
Harjutus 2

Toome kasutajale valikuid juurde. Salvesta oma eelmisest programmist koopia (Save As) ja hakkame seda muutma. Esmalt lisame algusesse kasutajale ka 4. valiku.
print("Peagi on jõulud. Päkapikud juba toimetavad!") print("Sinu ees on neli kingitust. Vali neist üks!") pakiValik = input("Millise numbriga paki valid? Kas 1, 2, 3 või 4?")
Seejärel muuda 3. valik ära nii, et sinna tekiks kasutajale uus valik. Näiteks ütleme kasutajale, et pakk oli tühi ja ta saab nüüd valida, kas kiusab kättemaksuks päkapikku või hakkab heaks lapseks. Selleks on vaja:
- Lisada muutuja kasutajaValik ja input.
- Lisada print() abil kasutajale valiku 1 ja 2.
- Lisada if ja mis juhtub siis kui kasutaja valib 1.
- Lisada elif ja mis juhtub kui kasutaja valib 2.
- Lisada else ja mis juhtub kui kasutaja valib midagi muud.
- Igale valikule lisada print() abil kas kasutaja võitis või kaotas.
print("Peagi on jõulud. Päkapikud juba toimetavad!") print("Sinu ees on neli kingitust. Vali neist üks!") pakiValik = input("Millise numbriga paki valid? Kas 1, 2, 3 või 4?") if pakiValik == "1": print("Ohoo, kommikarp! Oled olnud kukkupai ja saad maiustada.") print("Mäng läbi. Sa leidsid kingituse üles ja võitsid!") elif pakiValik == "2": print("Assa, vana auklik sokk! Oled vist teinud vallatust.") print("Mäng läbi. Sa ei saanud kinki ja kaotasid!") elif pakiValik == "3": print("Oi, oi! See pakk on tühi!") print("Sul on nüüd valik. Otsusta kas:") print("1) Paned päkapikule sussi sisse hiirelõksu. Miks ta siis on selline paharett!") print("2) Parandad oma käitumist. Ehk siis päkapikud näevad ja toovad järgmine kord kommi!") kasutajaValik = input("Vali kas 1 või 2...") if kasutajaValik == "1": print("Sa pisike tige paharett! Sa ei saa seekord kommi!") print("Oled nüüd pahade laste nimekirjas. Mäng läbi. Sa kaotasid!") elif kasutajaValik == "2": print("Tubli! Päkapikud näevad Su pingutusi!") print("Sa saad suure šokolaadi! Mäng läbi. Sa võitsid!") else: print("Sa ei tunne numbreid ja kinki ei saa!") print("Käivita mäng uuesti ja ole edaspidi tähelepanelikum!") else: print("Sa ei tunne numbreid ja pakki ei saa!") print("Käivita mäng uuesti ja vali järgmine kord pakk 1, 2 või 3!")
Juhusliku arvu genereerimine ja randint()
Teeme aga oma programmi põnevamaks ja pistame 4. pakikesse peitu ühe vigurvändast päkapiku. Kui kasutaja leiab päkapiku, siis peab ta ära arvama millisele numbrile päkapikk mõtleb. Kasutame selle jaoks juhusliku arvu genereerimist. Ehk siis arvuti otsustab meie eest, millisele numbrile päkapikk mõtleb.
Pyhtonis kasutatakse juhuarvu jaoks funktsiooni randint(). Mõned funktsioonid saab programmi kohe sisse kirjutada, näiteks nagu print(). Randint() asub aga random moodulis ja see tuleb programmi esmalt importida. Selle jaoks kirjuta kõige esimesele koodireale:
import random
Nüüd tuleks lisada valikule 4:
- Print() abil teavitus, et leitud on päkapikk ja see, et tuleb ära arvata üks number 1-5ni.
- Muutuja number, mille sisestab kasutaja.
- If-funktsioon, mis ütleb, et kui sisestatud number on sama, mis juhulik number, siis on kasutaja võitnud.
- Print() abil vastav teade kasutajale.
- Else ja print() abil kaotuse teade kasutajale.
elif pakiValik == "4": print("Oih! Pakis istub päkapikk!") print("Päkapikk peenikese häälega: Arva ära, mis numbrile ma 1-5 mõtlen!") number = int(input("Mis numbrit sa pakud?")) if number == random.randint(1,5): print("Hi-hi-hii! Sa arvasidki ära!") print("Saad suure kommikoti!") print("Mäng läbi. SA VÕITSID!") else: print("Häh! Vale vastus!") print("Sina küll kommi ei saa.") print("Mäng läbi. SA KAOTASID!")
Kõige lõpus lisa koodi else valikusse ka 4 juurde.
else: print("Sa ei tunne numbreid ja pakki ei saa!") print("Käivita mäng uuesti ja vali järgmine kord pakk 1, 2, 3 või 4!")
Ja nüüd kogu kood:
import random print("Peagi on jõulud. Päkapikud juba toimetavad!") print("Sinu ees on neli kingitust. Vali neist üks!") pakiValik = input("Millise numbriga paki valid? Kas 1, 2, 3 või 4?") if pakiValik == "1": print("Ohoo, kommikarp! Oled olnud kukkupai ja saad maiustada.") print("Mäng läbi. Sa leidsid kingituse üles ja võitsid!") elif pakiValik == "2": print("Assa, vana auklik sokk! Oled vist teinud vallatust.") print("Mäng läbi. Sa ei saanud kinki ja kaotasid!") elif pakiValik == "3": print("Oi, oi! See pakk on tühi!") print("Sul on nüüd valik. Otsusta kas:") print("1) Paned päkapikule sussi sisse hiirelõksu. Miks ta siis on selline paharett!") print("2) Parandad oma käitumist. Ehk siis päkapikud näevad ja toovad järgmine kord kommi!") kasutajaValik = input("Vali kas 1 või 2...") if kasutajaValik == "1": print("Sa pisike tige paharett! Sa ei saa seekord kommi!") print("Oled nüüd pahade laste nimekirjas. Mäng läbi. Sa kaotasid!") elif kasutajaValik == "2": print("Tubli! Päkapikud näevad Su pingutusi!") print("Sa saad suure šokolaadi! Mäng läbi. Sa võitsid!") else: print("Sa ei tunne numbreid ja kinki ei saa!") print("Käivita mäng uuesti ja ole edaspidi tähelepanelikum!") elif pakiValik == "4": print("Oih! Pakis istub päkapikk!") print("Päkapikk peenikese häälega: Arva ära, mis numbrile ma 1-5 mõtlen!") number = int(input("Mis numbrit sa pakud?")) if number == random.randint(1,5): print("Hi-hi-hii! Sa arvasidki ära!") print("Saad suure kommikoti!") print("Mäng läbi. SA VÕITSID!") else: print("Häh! Vale vastus!") print("Sina küll kommi ei saa.") print("Mäng läbi. SA KAOTASID!") else: print("Sa ei tunne numbreid ja pakki ei saa!") print("Käivita mäng uuesti ja vali järgmine kord pakk 1, 2, 3 või 4!")
Kordus kuni… ehk while loop
Küllap on Sul kõrini sellest, et programmi tuleb kogu aeg uuesti F5 või Run abil käivitada. Sellise korduva tegevuse jaoks võiksime lisada oma koodi while tsükili ja korduse loop. See hoiab programmi töös kuni tingimus on tõene. Plokkskeemina näeks see välja umbkaudu nii.

Liigu oma koodi algusesse ja kirjuta import random alla teisele reale muutuja, mida kasutatakse while loop tsükli tingimusena. Pole oluline, mida me kirjutame jutumärkide vahele, sest selle sisu määratakse edaspidi.
exitValik = "Tühi"
Selle alla tuleb määrata, millal tsükkel algab. Kasutame selleks !=, mis tähendas “ei ole võrdne”.
while exitValik != "exit"
Programm töötab nüüd seni kuni kasutaja trükib “exit”. Muudame programmi lõpus viimase rea, set see annaks kasutajale teada võimalusest valida mängu jätkamise või lõpetamise vahel.
exitValik = input("Jätkamiseks vajuta Enter, lõpetamiseks trüki exit.")
Salvesta ja testi kõiki programmi valikuvõimalusi. Vajadusel paranda oma koodi.
Lisan siia kontrollimiseks kogu koodi. Kuna mulle ei meeldinud, et tekstis on kõik read üksteise otsas, siis lisasin loetavuse parandamiseks print(“”) abil ka tühje ridu.
import random exitValik = "Tühi" while exitValik != "exit": print("") print("Peagi on jõulud. Päkapikud juba toimetavad!") print("Sinu ees on neli kingitust. Vali neist üks!") pakiValik = input("Millise numbriga paki valid? Kas 1, 2, 3 või 4?") if pakiValik == "1": print("") print("Ohoo, kommikarp! Oled olnud kukkupai ja saad maiustada.") print("Mäng läbi. Sa leidsid kingituse üles ja võitsid!") elif pakiValik == "2": print("") print("Assa, vana auklik sokk! Oled vist teinud vallatust.") print("Mäng läbi. Sa ei saanud kinki ja kaotasid!") elif pakiValik == "3": print("") print("Oi, oi! See pakk on tühi!") print("Sul on nüüd valik. Otsusta kas:") print("1) Paned päkapikule sussi sisse hiirelõksu. Miks ta siis on selline paharett!") print("2) Parandad oma käitumist. Võib olla siis päkapikud näevad ja toovad järgmine kord kommi!") kasutajaValik = input("Vali kas 1 või 2...") if kasutajaValik == "1": print("Sa pisike tige paharett! Sa ei saa seekord kommi!") print("Oled nüüd pahade laste nimekirjas. Mäng läbi. Sa kaotasid!") elif kasutajaValik == "2": print("Tubli! Päkapikud nägid Su pingutusi!") print("Sa saad suure šokolaadi! Mäng läbi. Sa võitsid!") else: print("Sa ei tunne numbreid ja kinki ei saa!") print("Käivita mäng uuesti ja ole edaspidi tähelepanelikum!") elif pakiValik == "4": print("") print("Oih! Pakis istub päkapikk!") print("Päkapikk peenikese häälega: Arva ära, mis numbrile ma 1-5 mõtlen!") number = int(input("Mis numbrit sa pakud?")) if number == random.randint(1,5): print("Hi-hi-hii! Sa arvasidki ära!") print("Saad suure kommikoti!") print("Mäng läbi. SA VÕITSID!") else: print("Häh! Vale vastus!") print("Sina küll kommi ei saa.") print("Mäng läbi. SA KAOTASID!") else: print("Sa ei tunne numbreid ja pakki ei saa!") print("Mängi uuesti ja vali järgmine kord pakk 1, 2, 3 või 4!") exitValik = input("Jätkamiseks vajuta Enter, lõpetamiseks trüki exit.")
Kasutatud allikad:
- L. Stowell, R. Dickins „Coding for Beginners using Python“
- TalTech. Pythoni õppematerjalid. https://pydoc.pages.taltech.ee/
- TÜ „Programmeerimise algkursus“ materjalid: https://courses.cs.ut.ee/MTAT.03.100/2012_fall/uploads/opik/index.html
- Pildid: Pixabay.com