For-tsükkel
For-tsükkel
Lisaks while-tsüklile on Pythonis veel üks tsüklitüüp – for-tsükkel. Järgnev näide väljastab ekraanile "Tere!" 3 korda.
for i in range(3): print("Tere!")
Nagu näed, sarnaneb for-tsükkel kuju poolest while-tsükliga – esimesel real on päis, mis määrab korduste arvu, ning edasi tuleb taandreaga esitatud keha, mis sisaldab lauseid, mida igal kordusel käivitatakse. For-tsüklit saab nimetada määratud tsükliks, sest päises määratakse kindel arv, kui palju kordi tsüklit läbitakse.
Miks "for"?
Mõnedes programmeerimiskeeltes nimetatakse for-tsüklit hoopis for-each-tsükliks, sest tsükli keha täidetakse päises näidatud järjendi iga elemendi jaoks uuesti. Pythonis on otsustatud lühema nime "for" kasuks.
Funktsioon range
Sageli on meil vaja selliseid tsükleid, kus tsüklimuutuja väärtus teatud reeglite järgi muutub. Meil endalgi on olnud vaja, et näiteks i
omandaks järjest väärtusi 0, 1, 2, 3 jne. Siin tuleb appi funktsioon range
, mis genereerib järjendit meenutava väärtuse. Näiteks range(4)
annab vahemiku, milles on 0, 1, 2 ja 3:
for i in range(4): print(i)
Kui argumendiks on mittepositiivne arv, siis ühtegi arvu vahemikus pole:
for i in range(-4): print(i)
Vahel pole for-tsüklis tsüklimuutuja i
väärtus oluline, sest meid huvitab vaid korduste arv. Kuna tsüklimuutuja peab ikkagi kirjas olema, kuid selle väärtust ei pea kasutama, saab muutuja i
asemel kasutada ka alakriipsu _
:
for _ in range(3): print("Tere!")
Kui funktsioonile range
anda kaks argumenti, siis esimene näitab seda, millisest arvust alustatakse ja teine seda, millise arvu juures lõpetatakse (seda ennast mitte kaasates).
for i in range(1, 4): print(i)
Kui teine argument ei ole esimesest suurem, siis ühtegi arvu vahemikus pole.
Kui funktsioonile range
on antud kolmas argument, siis see näitab sammu, mis võib olla ka negatiivne. Nii annab funktsioon range(0, 13, 2)
arvud 0, 2, 4, 6, 8, 10, 12 ja range(4, -5, -3)
arvud 4, 1, -2.
Ekraanile saab väljastada arvud 0, 2, 4, 6, 8, 10, 12 selliselt:
for i in range(0, 13, 2): print(i)
Ja arvud 4, 1, -2 selliselt:
for i in range(4, -5, -3): print(i)
for vs while
Tegelikult saaks for-tsükli asemel alati kasutada ka while-tsüklikt, aga tulemus poleks alati nii selge. Võrdleme omavahel samaväärseid while- ja for-tsükleid.
while-tsükli näide:
i = 0 while i < 5: print(i) i += 1
ja samaväärse for-tsükli näide:
for i in range(5) print(i))
Nagu näha, annab for-tsükkel koos range()'iga sama tulemuse palju lihtsamalt – tsüklimuutuja algväärtustamine, selle suurendamine ja tsükli lõpetamise kontrollimine toimuvad kõik automaatselt. Seetõttu ongi soovitatav loenduril põhinevad tsüklid kirjutada for-tsüklina.
Samas, mõnede probleemide lahendamisel ei piisa for-tsüklist. Näiteks arvutimänge, kus tegevus kordub teatud tingimuse kehtivuseni ei saa mugavalt for-tsükliga kirja panna. Seetõttu ongi Pythonis kaks erinevat korduslauset – paindlik, aga pisut tülikas while-lause ning mugav, aga teatud juhtudel ebasobiv for-lause.
Funktsiooni korduv kasutamise tsüklis
Nüüd, kui me oskame kasutada tsükleid, saame ka funktsioone mugavamalt korduvalt kasutada. Teeme suurema näite, kus kirjutame ümber varasemalt ringipindala arvutamise programmi selliselt, et leiaks ringi pindala, kui raadius on 1, 2, 3, 4 ja 5. Selleks kutsume funktsiooni ringi_pindala
korduvalt välja põhifunktsioonis selliselt, et
- for-tsükliga anname funktsioonile argumendiks ükshaaval arvud ühest viieni ja
- väljastame ekraanile vastavalt funktsiooni tagastatud väärtuse ehk ringi pindala.
from math import pi def ringi_pindala(raadius: int) -> float: pindala = pi * raadius**2 return round(pindala, 2) def main(): for i in range(1, 6): print(f"Ringi pindala on {ringi_pindala(i)}") if __name__ == "__main__": main()
Korduslause video
Enesekontroll