17. hodina - Vetvenie a konštrukcie¶
Kamarátku pozdravíš „
Ahoj
“, ale vieš, že starších ľudí treba pozdraviť slušne, napríklad „Dobrý deň
“. Napíš program, v ktorom do premennejvek
priradíš vek človeka. Potom použi príkaz vetvenia na to, aby sa program podľa veku rozhodol, ktorý z uvedených dvoch pozdravov vypíše. Otestuj, aké pozdravy sa vypisujú pre rôzne hodnoty premennejvek
.
Na brigáde v bufete ťa zaplatia podľa takéhoto pravidla:
ak budeš pracovať menej ako
10
hodín, tak zarobíš3
eurá za hodinu,inak dostaneš plat
4
eurá za hodinu.
Do premennej
hodin
priraď počet tvojich odpracovaných hodín. Potom pomocou príkazu vetvenia vypíš, koľko zarobíš. Program by mal vypísať:pre
hodin = 7
:Zarobíš 21 eur.
pre
hodin = 12
:Zarobíš 48 eur.
Predchádzajúca úloha sa dá riešiť aj takto:
hodin = 20 if ..............................: plat = .............................. else: plat = .............................. print('Zarobíš', plat, 'eur.')
Doplň namiesto vybodkovaných častí správne výrazy. Over, že program korektne počíta plat pre rôzne hodnoty premennej
hodin
.
Telefónny operátor Vegafón počíta platby za prenesené megabajty podľa takýchto pravidiel:
ak za deň prenesieš menej ako
10
megabajtov, zaplatíš za každý megabajt0.2
eur,inak zaplatíš za celý deň
2
eurá.
Napíš program, v ktorom do premennej
megabajt
priradíš počet prenesených megabajtov za jeden deň. Použi príkaz vetvenia na to, aby si do premennejcena
priradil vyúčtovaný počet korún. Nakoniec vypíš vypočítanú cenu. Napríklad:pre
megabajty = 3
:Zaplatíš 0.6 eur.
pre
megabajty = 20
:Zaplatíš 2 eur.
Telefónny operátor Zodrafón počíta platby za prenesené megabajty podľa „výhodnejších“ pravidiel:
ak za deň neprenesieš viac ako
10
megabajtov, zaplatíš za každý megabajt0.1
eur,inak zaplatíš za každý megabajt navyše (nad
10
megabajtov)0.2
eur.
Napíš program, ktorý počíta cenu podľa takýchto pravidiel a over, že správne funguje. Napríklad:
pre
megabajty = 3
:Zaplatíš 0.3 eur.
pre
megabajty = 20
:Zaplatíš 3.0 eur.
Vytvor program, ktorý podľa zadaného času nakreslí do grafickej plochy slnko alebo mesiac. Do premennej
cas
priraď počet hodín. Použi príkaz vetvenia na to, aby sa precas < 8
kreslil mesiac biely kruh, inak sa nakreslí slnko ako žltý kruh. Polomer kruhu nech je v oboch prípadoch50
, stred kruhu200
,100
. Napríklad:pre
cas = 4
pre
cas = 14
Doplň do predchádzajúceho riešenia kreslenie pozadia – mesiac sa nakreslí na tmavomodré pozadie, slnko na svetlomodré pozadie:
pre
cas = 4
pre
cas = 14
Stačí, ak do každej vetvy pridáš príkaz na kreslenie veľkého obdĺžnika, ktorý prekryje celú grafickú plochu:
if ..............................: canvas.create_rectangle(.............................., fill='navy') canvas.create_oval(.............................., fill='white') else: canvas.create_rectangle(.............................., fill='cyan') canvas.create_oval(.............................., fill='yellow')
Odsať oba príkazy, ktoré tvoria telo vetvy
if
ajelse
– použi tabulátor
Uprav predchádzajúci program tak, aby najskôr do premenných
x
,y
priradili súradnice stredu kruhu a tie sa potom použili v príkazochcreate_oval
. Okrem toho pridaj na úplný koniec programu aj kreslenie zeleného obdĺžnika ako zeme. Potom program prex = 200
ay = 150
bude kresliť takéto scény:pre
cas = 4
pre
cas = 14
Zelený obdĺžnik začína na
y
-ovej súradnici180
.
Vylepši predchádzajúci program tak, aby fungoval ako náhodný generátor krajiniek – priraď na začiatku do premenných
x
,y
,cas
náhodné čísla:x
z rozsahu100
,300
y
z rozsahu100
,200
cas
z rozsahu0
,16
Spusti program aj niekoľko krát:
pre
cas = 4
pre
cas = 14
Nasledujúci program vypíše denný harmonogram:
for i in range(8): print(i, 'ešte spím') for i in range(6): print(8 + i, 'som v škole')
Čo program vypíše?
Program sa dá zapísať aj takto, iba pomocou jedného cyklu:
for i in range(14): if i < 8: # print(i, 'ešte spím') # telo cyklu – treba ho odsadiť else: # print(i, 'som v škole') #
príkazy vo vetvách
if
aelse
treba odsadiť ešte viac
Telo cyklu
for
obsahuje jeden vnorený príkaz vetveniaif else
. Vyskúšaj, ako funguje táto verzia.
Podobne, ako v predchádzajúcom príklade, použi cyklus s vnoreným vetvením a vypíš:
0 som chudobný 10 som chudobný 20 som chudobný 30 som chudobný 40 som chudobný 50 som bohatý 60 som bohatý 70 som bohatý 80 som bohatý 90 som bohatý
Premenná cyklu sa mení od
0
po9
. Vypisuje sa desaťnásobok hodnoty tejto premennej.
Vieš, pre ktoré čísla
n
platí, žen
2 je menšie ako5 * n
? Napíš program, ktorý pre všetky čísla od0
po10
otestuje tento vzťah a vypíše o tom informáciu. Napríklad:... 16 je menšie ako 20 25 je väčšie alebo rovné ako 25 36 je väčšie alebo rovné ako 30 ...
Čo tvoj program zistil? Pre ktoré
n
to platí?
Pomocou jediného cyklu s vnoreným vetvením nakresli koráliky:
(*)
Uprav predchádzajúci program tak, aby sa prvých8
korálikov farbilo náhodne pomocou:random.choice(['red', 'yellow'])
a zvyšných 7 pomocou:
random.choice(['blue', 'green']).
Môžeš dostať takýto výsledok:
(*)
Zadefinuj podprogramkoralik
. V ňom vygeneruj náhodné pozíciex
,y
pre stred koráliku. Potom, podľax
-ovej súradnice sa rozhodni:či sa nakreslí červený alebo žltý korálik, ak je
x < 200
alebo sa nakreslí modrý prípadne zelený korálik pre väčšie čísla.
Využi kreslenie korálikov z predchádzajúcej úlohy.
Keď zavoláš podprogram
koralik
v cykle100
krát, dostaneš napríklad takýto obrázok: