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.

Litsents

Icon for the Creative Commons Attribution 4.0 International License

Programmeerimine on loodud Eno Tõnisson, Tauno Palts, Merilin Säde, Kaarel Tõnisson jt poolt Creative Commons Attribution 4.0 International License litsentsi alusel, kui pole teisiti märgitud.

Jaga seda raamatut