3. Ülesanded: tsükkel, plokkskeem
Teooriapeatükid:
Ülesanne 1
Koosta programm, mis küsib kasutajalt nime ja tervitab teda nimeliselt 5 korda ja lisab ka tervituse järjekorranumber.
Palun sisesta oma nimi: >> Siim Ole tervitatud, Siim, 1. korda. Ole tervitatud, Siim, 2. korda. Ole tervitatud, Siim, 3. korda. Ole tervitatud, Siim, 4. korda. Ole tervitatud, Siim, 5. korda.
Ülesanne 2
Koosta programm, mis küsib kasutajalt 10 korda arve ja väljastab seejärel nende arvude summa. Täienda seda programmi nii, et kasutajalt küsitakse arve seni, kuni kasutaja enam uut arvu ei sisesta, vaid vajutab lihtsalt sisestusklahvi. Proovige seda ülesannet lahendada nii while- kui for-tsükliga.
Ülesanne 3
Koosta programm, mis aitab lastel treenida liitmist. Programm peaks pakkuma välja juhuslike arvudega liitmistehteid ning ootama kasutajalt vastust. Kui vastus on õige, kiitma kasutajat, kui aga vale, andma õige vastuse ja esitama uue tehte. Järjest esitatavate tehete hulk võib olla programmis ette antud (näiteks 10), samuti võib olla ette antud piirid, kui suuri arve kasutajalt küsitakse (näiteks 1 kuni 50). Programm peaks pidama arvestust ka õigete vastuste üle ning väljastama pärast viimast tehet tulemuse. Näiteks:
Tere! Õpime arvutama. Esitan 10 liitmistehet, püüa vastata õigesti. 5 + 16 = >> 21 Tubli, õige vastus! 18 + 23 = >> 39 Sinu vastus polnud õige. Õige vastus on 41. [...] 2 + 5 = >> 7 Tubli, õige vastus! See oli viimane ülesanne. Kogusid 10-st punktist 7.
Täiendusi vabal valikul:
- Programm lubab kasutajal alguses sisestada, mitut tehet soovitakse.
- Esitatavate arvude piirid saab kasutaja ette anda (maksimum või nii miinimum kui maksimum).
- Küsitakse mitte ainult liitmistehteid, vaid ka teisi (lahutamine, korrutamine, jagamine).
- Vastavalt lõpptulemusele reageeritakse erinevalt: "Ülihea!", "Olid tubli!", "Korralik keskmine tulemus!", "Püüad järgmisel korral rohkem." vms.
Ülesanne 4
Koosta mäng, kus saate ära arvata arvuti poolt mõeldud täisarvu ühest kahekümneni. nt:
Mõtlesin ühele täisarvule 1-20ni. Mis arv see on? >> 15 Liiga suur, proovi uuesti. >> 7 Liiga väike, proovi uuesti. >> 9 Liiga väike, proovi uuesti. >> 11 Tubli, arvasid ära. Arv oli 11.
Enne ülesande lahendamist mõelge välja mängu algoritm ja koostage selle kohta plokkskeem.
Ülesanne 5
Täienda eelmist programmi selliselt, et kasutajal oleks arvu arvamiseks 5 korda, s. t. kui viie korra jooksul ära ei arvata, ütleb arvuti, et kaotasid, ning teatab õige arvu. Täienda vastavalt ka plokkskeemi.
Ülesanne 6
Väljasta ekraanile kõikvõimalikud kombinatsioonid kujul "x - y - z", kus x, y ja z on mistahes täisarvud 1-st 20-ni (20 kaasaarvatud). Samuti loenda, mitu sellist kombinatsiooni leiti. Tulemus:
1 - 1 - 1 1 - 1 - 2 1 - 1 - 3 [...] 15 - 12 - 2 15 - 12 - 3 [...] 20 - 20 - 19 20 - 20 - 20 Kokku leiti 8000 kombinatsiooni.
Ülesanne 7
Koosta programm, mis küsib kasutajalt arvu N ja väljastab O-tähtedest koosneva ruudu suuruses NxN. Seejärel muutke programmi nii, et ruudu diagonaalidel olevad märgid oleksid X-d, näiteks:
X O O O O O O O X O X O O O O O X O O O X O O O X O O O O O X O X O O O O O O O X O O O O O O O X O X O O O O O X O O O X O O O X O O O O O X O X O O O O O O O X
... või (paarisarvulise N-i puhul):
X O O O O O O O O X O X O O O O O O X O O O X O O O O X O O O O O X O O X O O O O O O O X X O O O O O O O O X X O O O O O O O X O O X O O O O O X O O O O X O O O X O O O O O O X O X O O O O O O O O X
Tühikuid võid lisada vastavalt oma soovile.
Ülesanne 8
On selge, et auto kiiruse tõstmine vähendab sõidule kuluvat aega ehk ma jõuame varem sihtpunkti. Kui palju me aga ajas võidame? Koostage programm, mis küsib käivitamisel läbitava vahemaa pikkust (kilomeetrites, see kehtib kogu programmitöö aja), seejärel aga küsib kasutajalt korduvalt kiirust (km/h) ning väljastab selle põhjal korrektse lausega sõiduks kuluva aja ja erinevuse eelmisest tulemusest. Kui kasutaja uut kiirust ei sisesta, vaid vajutab lihtsalt sisestusklahvile, siis katkestatakse tsükkel ja tänatakse kasutajat.
Ülesanne 9
Koosta programm, mis "viskab täringut" kolm korda ehk väljastab ekraanile 3 juhusliku täringuviske tulemused. Et ekraanipilt oleks realistlikum, esita tulemused graafiliselt, selleks kasuta nn. ASCII graafikat (https://en.wikipedia.org/wiki/ASCII_art): imiteeri tekstisümbolite abil täringu külje kujutist. Täiendamiseks:
- Kasutaja võib alguses ise valida, mitu korda täringut visata.
- Mängida võib mitu inimest, programmi alguses küsitakse inimeste nimesid.
- Täringut imiteeritakse kolmemõõtmelisena.
Ülesanne 10
ASCII animeerimine. Nagu teame, saame funktsiooni print() abil ekraanile midagi trükkida, järgmine print()-käsk alustab taas uuelt real (kui me pole teisiti määranud). Kui programmi aknasse uusi ridu ei mahu, nihutatakse vanu ridu ühe võrra ülespoole. Püüame kasutada seda omadust animeerimise eesmärgil. Näiteks neli varianti: (print-käsuga ridu on tsükli sees vastavalt programmile 1 kuni 6!):
https://www.youtube.com/watch?v=FJtuGQtkj7I
Esimese kolme puhul on konsooliakna kõrgust väiksemaks lohistatud, et sellesse mahuks just õige arv ridu. Teeme tsükli (näiteks lõpmatu while-tsükli, kus tingimuseks on lihtsalt True):
kaugus = 0 while True: print(" " * kaugus + ">") kaugus += 1
Sellise tsükli tegemine pole tavapärane, kuid momendil on see sobiv. Programmitööd saab katkestada klahvikombinatsiooniga <Ctrl> + C (sõnast Cancel).
Praeguses näites kasvab muutuja "kaugus" väärtus piiramatult, seega peaks kasutama tingimuslauset kontrollimaks, ega muutuja "kaugus" väärtus pole liiga suur jne.
Kuna vaikimisi on ridade esitamise kiirus seotud vaid arvutikiirusega, võime me soovida, et read tekiksid teatud pauside järel. Selleks võime programmi algusesse importida mooduli "time":
import time
Kui see on tehtud, võime tsükli sisse viivituse kirjutamiseks kasutada sellist rida:
time.sleep(0.2)
Nägu näha, on konkreetsel juhul on viivituse pikkus 0,2 sekundit ehk pärast iga rida oodatakse 0,2 sekundit, enne kui programmi täitmist jätkatakse.
Ülesanne 11
Koosta programm, mis trükib kartulikuhjamängu jaoks vajaliku mänguväljaku. Programmi alguses küsitakse kasutajalt, millise suurusega mänguväljakut soovitakse saada.
Creative Commons litsentsiga Autorile viitamine + Mitteäriline eesmärk 3.0 Eesti (CC BY-NC 3.0 EE) - https://creativecommons.org/licenses/by-nc/3.0/ee/