16 Tsükliga kilpkonn. Tsüklimuutuja kasutamine
Selles peatükis kasutame tsüklit kilpkonnaga joonistamiseks ning vaatame, kuidas saab tsüklimuutujat erinevatel viisidel muuta.
TSÜKLIGA KILPKONN
Eelmisel nädalal tutvusime kilpkonnagraafikaga ja tegime näiteprogrammina ruudu.
Näiteprogramm. Ruut I
from turtle import * # * lisamisel imporditakse kõik kilpkonna käsud forward(100) # Kilpkonn liigub edasi 100 pikslit left(90) # Kilpkonn pöörab 90° vasakule forward(100) # Kordame eelnevaid käske, sest ruudul on neli külge left(90) forward(100) left(90) forward(100) exitonclick() # Saame akna sulgeda hiireklõpsuga
On näha, et kilpkonn peab täitma korduvalt samu käske: minema 100 pikslit edasi ja pöörama seejärel 90° vasakule. Kui me lisame need käsud tsükli sisusse, saame kirjutada programmi ümber nii, et ruut joonistatakse while-tsüklit rakendades.
Näiteprogramm. Ruut II
from turtle import * i = 0 # Muutuja i väärtus on esialgu 0 while i < 4: # Kilpkonn joonistab tsükli abil ruudu. Tsükli keha läbitakse neli korda. forward(100) left(90) i = i + 1 # Muutuja i väärtust suurendatakse ühe võrra exitonclick()
Ülesanne
Muuda programmi nii, et ruudu asemel joonistataks võrdkülgne kolmnurk. Selleks on tarvis muuta jätkamistingimust (i < 4
) ning pööramise nurka (käsku left
).
TSÜKLIMUUTUJA KASUTAMINE
Eelmises peatükis nägime, et tsüklimuutuja i
väärtust saab tsükli sisus kasutada. Meie näites andis print(i)
igal sammul erineva väljundi, sest i
väärtus muutus. Vaatame veel tsüklimuutuja kasutusvõimalusi.
Tsüklimuutujast sõltuv kilpkonn
Modifitseerime ruudu joonistamise programmi nii, et igal sammul sõltuks edasiliikumise pikkus tsüklimuutuja i
tolle hetke väärtusest. Asendame rea forward(100)
reaga forward(100 * i)
.
Näiteprogramm. Nelinurk-spiraal
from turtle import * i = 0 # Muutuja i väärtus on esialgu 0 while i < 4: # Tsükli keha läbitakse neli korda. forward(100 * i) left(90) i = i + 1 # Muutuja i väärtust suurendatakse ühe võrra exitonclick()
Ülesanne
Tee joonistatav nelinurk-spiraal ilusamaks: suurenda tsükli sammude arvu (tingimust i < 4
) ning vähenda igal sammul edasi liikumise pikkust (käsus forward
asenda arv 100 millegi väiksemaga).
Tsüklivälise muutuja kasutamine
Tsükli sees toimuvat saab kasutada tsüklist väljaspool loodud muutujate muutmiseks. Nõnda saab arvutada väärtusi, mis sõltuvad rohkem kui ühest tsükli sammust. Näiteks loome muutuja summa
, millele liidame tsükli igal sammul tsüklimuutuja selleaegse väärtuse. Tsükli lõpuks on muutuja summa
väärtus parajasti võrdne tsüklimuutuja kõigi läbitud väärtuste summaga.
Näiteprogramm. Tsüklimuutuja väärtuste summa
i = 0 summa = 0 while i < 5: summa = summa + i i = i + 1 print(summa)
Enesekontroll (2 küsimust)
Tsüklimuutuja muutmine
Eelmistes näidetes on tsüklimuutuja muutunud iga sammuga ühe võrra. See on küll kõige sagedasem variant, kuid tsüklimuutujat saab muuta ükskõik millise lubatud tehtega.
Näiteprogramm. Tsüklimuutuja+2
i = 0 while i < 5: i = i + 2 print(i)
Näiteks on lubatud ühest väiksema arvu liitmine (i = i + 0.5
) või igal sammul väärtuse kolmekordistamine (i = i * 3
). Korrutamise puhul peab hoiduma esialgsest väärtusest 0, sest korrutamine seda ei muuda.
Programm. Kasutaja sisendiga kolme kordsete kuvamine
Olgu ülesandeks luua programm, mis väljastab ekraanile 1, 3, 9, 27 … (iga eelmine tulemus korrutatakse järgmise saamiseks kolmega). Kasutajalt küsitakse, millisest arvust peab tulemus väiksemaks jääma:
Näiteprogramm. Sisendist väiksemad kordsed
piir = int(input("Millisest arvust väiksemaks peab tulemus jääma? ")) tulemus = 1 while tulemus < piir: print(tulemus) tulemus = tulemus * 3
Olgu meil uus ülesanne: küsime nüüd kasutajalt, mitu kolme kordset arvu väljastada. Selleks loome uue muutuja jrk
, millega loendame järjekorranumbrit:
Näiteprogramm. Sisendiga määratud kogus
piir = int(input("Mitu tulemust kuvada?")) tulemus = 1 jrk = 0 while jrk < piir: print(str(jrk) + ". rida on " + str(tulemus)) tulemus = tulemus * 3 jrk = jrk + 1
Näeme, et tsükli igal sammul kasvab järrekorranumber jrk
1 võrra, muutuja tulemus
aga kolmekordistub.
Palun kommenteerige seda materjali Google’i küsimustikus.