4. nädala lisaharjutused
1. Sentide sõnastamine
Kirjuta funktsioon, mis võtab argumendiks arvu, mis tähistab sentide kogust, ning tagastab sõne, kus rahasumma on esitatud täiseurodena ja sellest ülejäävate sentide arvuna või ainult eurodena või ainult sentidena.
Näiteks:
- kui argumendiks antakse 207, siis funktsioon tagastab "2 eurot ja 7 senti"
- kui argumendiks antakse 101, siis funktsioon tagastab "1 euro ja 1 sent" (NB! mitte „1 eurot ja 1 senti”; ainsusel ja mitmusel tuleb vahet teha!)
- kui argumendiks antakse 95, siis funktsioon tagastab "95 senti" (st ilma eurodeta)
- kui argumendiks antakse 100, siis funktsioon tagastab "1 euro" (st ilma sentideta)
2. Uitaja
Kirjuta programm, kus kilpkonn joonistab sirglõike nii, et iga lõigu joonistamise järel ta juhuslikult kas pöörab 90° paremale, pöörab 90° vasakule, jätkab otse või keerab nina tagasi sinnapoole, kust ta just tuli.
Lisa 1. Proovi varianti, kus pöördenurgaks valitakse juhuslik täisarv lõigust 0...360.
Lisa 2 (raskem). Täienda eelmist varianti nii, et kilpkonna liikumine on küll juhuslik, aga situatsioonist (nt asukohast või suunast) sõltuvalt valitakse mõned pöördenurgad suurema tõenäosusega. Proovi saavutada konfiguratsioon, kus kilpkonna joonistatud sigrimigrist moodustub tasapisi mingi kujund (näiteks ring).
3. Kuupäevade vahe
Kirjuta funktsioon, mis võtab argumentideks kahe kuupäeva komponendid ja tagastab neile vastavate kuupäevade vahe päevades.
Näiteks
kuupäevade_vahe(2018, 10, 25, 2018, 9, 1)
tagastab arvu 54.
4. Reaktsioonikiirus
Kirjuta programm, mis korduvalt palub kasutajal sisestada sümboli, mis peab vastama etteantud kriteeriumidele. Sisestatud sümbol peab olema vastavalt programmi nõudmisele kas suurtäht, väiketäht või number. Tähe korral peab programm ka täpsustama, kas sisestada vokaal või konsonant. Kriteeriumid tuleks valida juhuslikult.
Reaktsioonikiiruse mõõtmiseks on mitu võimalust.
- Kasutaja peab koguma n punkti, kusjuures iga õigesti sisestatud sümboliga saab ta 1 punkti ja valesti sisestatud sümboliga −1 punkti. Programm võtab aega, mitu sekundit kulub n punkti saavutamiseks.
- Teise võimalusena võib aega arvestada igal sisestusel – kui kasutaja sisestas vastuse ettenähtud ajast hiljem, siis ta punkti ei saa. Programm esitab n küsimust ja loeb kokku õigeaegselt antud õigete vastuste arvu.
Ajavõtmisel on abiks moodul time:
>>> from time import time >>> help(time) Help on built-in function time in module time: time(...) time() -> floating point number Return the current time in seconds since the Epoch. Fractions of a second may be present if the system clock provides them. >>> time() 1347470675.236 >>> time() 1347470679.447
5. Pokkerikäte tuvastamine
Kirjuta funktsioon käsi, mis saab argumentideks mängukaartide tähised ja tagastab parima pokkerikäe nimetuse, mis neist kaartidest välja tuleb (http://et.wikipedia.org/wiki/Pokkerikäte_tugevusjärjestus). Näiteks
käsi('2♣', '2♦', 'J♥', 'K♥', 'K♦')
peaks tagastama sõne "Kaks paari".
NB! Võib eeldada, et kaardid antakse argumentideks tugevuse järjekorras (nõrgemad vasakul). Kui argumentide seas on mitu sama tugevusega (erinevate mastidega) kaarti, siis nende omavaheline järjestus ei ole määratud.
(Mastitähised võid enda koodi kopeerida siitsamast: ♥♦♣♠)
Ühe vajaliku sõneoperatsiooni tutvustus/meeldetuletus:
>>> s = 'abcde' >>> s[0] 'a' >>> s[1] 'b' >>> s[-1] 'e' >>> s[:-1] 'abcd'
Sellele ülesandele on Moodle'is olemas automaatkontroll.
Raskem variant. Kirjuta lahendus selliselt, et kaarte võib argumentideks anda suvalises järjekorras. Kui see tundub liiga raske, siis katsu enda jaoks sõnastada, mis teeb selle raskeks. Järgmiste teemade õppimisel tuleta seda ülesannet meelde ja katsu leida järjest paremaid lahendusi.
6. Kas ristkülik?
Pykkar asub seintega piiratud alal, aga see ala ei pruugi olla ristkülikukujuline. Lisaks seintele võib alal olla muid takistusi (kastid, torbikud). Pykkari esialgne asukoht ja suund pole teada. Kirjuta programm, mis tuvastab Pykkari abil, kas etteantud ala välisservad moodustavad ristküliku. Näiteks selle maailma puhul on vastus "jah":
######### # < # # b # # #### # # # # # # #########
Selle maailma puhul aga "ei":
######### # > # # # # 3 # # # # ### # # # # # # # # #########
Veidi lihtsam variant. Võid eeldada, et Pykkar on alguses ninaga vastu välisseina.
(Mõtle, kuidas lahendaksid selle probleemi päriselus, nt kui oled kuskil pimedas toas ja pead toa kuju tuvastama.)
Vabas vormis ülesanded
Järgnevas on mõned loomingulised ülesanded.
7. Piksligraafika
Failis pixboard.zip on Pythoni moodul (pixboard.py), mille abil on võimalik joonistada pilte pikselhaaval. Mooduli kasutamise näited leiad failidest, mille nimede algused on proc_demo (teised demo-failid kasutavad Pythoni konstruktsioone, mida praegu siin kursusel veel pole käsitletud).
Ülesanne: joonista midagi lahedat!
Variatsioon: esita koos naabriga teineteisele väljakutse – kumbki tekitab ühe pildi ja siis teine peab kirjutama programmi, mis teeb umbes samasuguse pildi.
Näide
8. Tamagotchi
Tamagotchi on virtuaalne loomake, kes vajab aegajalt süüa, juua ja tähelepanu. Kirjuta tekstiline Tamagotchi programm.
9. Miljonimäng
Kirjuta oma versioon Miljonimängust.
10. Pykkari ülesanne
Koosta mingi lahe ja/või pinget pakkuv Pykkari ülesanne.