Arvutiteaduse instituut
  1. Kursused
  2. 2022/23 kevad
  3. Programmeerimise alused (MTAT.03.236)
EN
Logi sisse

Programmeerimise alused 2022/23 kevad

  • Pealeht
  • 1. Sissejuhatus
  • 2. Tingimuslause
  • 3. Tsükkel
  • 4. Järjend
  • 5. Funktsioon
  • 6. Andmevahetus. Lihtne kasutajaliides
  • Loengud
  • Moodle
  • Lahendus
  • Thonny paigaldamine
  • Thonny logide esitamine
  • Silumine
  • Kiireksamist
  • Viited
< eelmine4. nädala sisukordjärgmine >

4.2 For-tsükkel. Funktsioon range

ÜKSIK ELEMENT TEISTE SEAS

Jätkame järjendi teemaga, vaadeldes nüüd järjendi ühte konkreetset elementi. Võtame näiteks järjendi a = [12, 23, 34, 45, 56] elemendi, mille indeks on 3. Näeme, et a[3] (või teisiti a[-2]) väärtus on 45. Tegelikult võime a[3] (ja muidugi ka teisi elemente) küllaltki iseseisvatena käsitleda. Näiteks saame seda kasutada avaldistes või anda sellele uue väärtuse.

a = [12, 23, 34, 45, 56]
print(a[3])
print(type(a[3]))
print(a[3] - 32)
a[3] = 1
print(a[3])

Ülesanne

Nagu näeme, siis on indeksit võimalik arvutades leida. Oluline on vaid, et indeks oleks lubatud vahemikus.

Järjendi idee on siiski kõiki (või vähemalt mingeid) elemente koos käsitleda. Proovime järjendi elemendid järjestikustel ridadel ekraanile saada. Tegemist on selgelt tsüklilise tegevusega, mida saamegi while-tsüklina realiseerida.

a = [12, 23, 34, 45, 56]
i = 0
while i < len(a):
    print(a[i])
    i += 1

Kuna viimase elemendi indeks on ühe võrra väiksem kui järjendi pikkus, siis tõesti selline tsükli tingimus on sobiv. Väljastamise asemel võime ka näiteks kõik need elemendid, mille väärtus on suurem kui 30, nullida.

a = [12, 23, 34, 45, 56]
i = 0
while i < len(a):
    if a[i] > 30:
        a[i] = 0
    i += 1
print(a)

FOR-TSÜKKEL

Kuna väga sageli on vaja järjendiga just elementhaaval midagi ette võtta, on kasutusele võetud eriline tsükkel. For-tsükkel võtabki järjest igal sammul fookusesse järjendi ühe elemendi.

Elementide väljastamise saame realiseerida nüüd lühemalt.

a = [12, 23, 34, 45, 56]
for el in a: #el asemel võib ka mingi teine nimi olla
    print(el)

Muutuja el saab igal tsükli sammul väärtuseks järjendi a järgmise elemendi. Laias laastus on for-tsükkel while-tsükliga sarnane. Esimesel real on päis, mis määrab, millal tsükkel lõpetatakse. Järgneb taandreaga määratud keha (ehk sisu), mida igal sammul täidetakse. Tsüklit korratakse niipalju kordi, kui järjendis on elemente.

Muutuja el kaudu ei saa muuta järjendi elementide väärtusi. Kui püüda teha ülaltoodud teisele while-tsüklile analoogi, siis nii jääb a muutmata.

a = [12, 23, 34, 45, 56]
for el in a:
    if el > 30:
        el = 0
print(a)

Mitmetes programmeerimiskeeltes on for-tsükkel teistsugune ja Pythoni for-tsüklile sarnast nimetatakse hoopis for-each-tsükliks.

RANGE

Üsna sageli on vaja selliseid tsükleid, kus tsükli muutuja väärtus teatud reeglite järgi muutub. Meil endalgi oli 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. Vajadusel võime ka vastava järjendi saada list(range(4)), aga for-tsükli jaoks seda vaja pole.

for i in range(4):
    print(i)

Muutuja i saab järjest väärtused 0, 1, 2 ja 3.

Kui argumendiks on mittepositiivne arv, siis ühtegi arvu vahemikus pole.

for i in range(-4):
    print(i)

Vahel meil tegelikult tsükli muutuja väärtust teada pole vajagi, huvitab vaid korduste arv. Paneme näiteks kilpkonna jälle ruutu joonistama

from turtle import *
for i in range(4):
    forward(100)
    left(90)
exitonclick()

Kuigi muutuja i väärtust vaja ei olnud, pidi see muutuja ikka kirjas olema.

Funktsiooni range saab kasutada ka 2 või 3 argumendiga. Kui on kaks argumenti, siis esimene näitab, millisest arvust alustatakse ja teine, millise arvu juures lõpetatakse (seda ennast mitte kaasates).

for i in range(1, 4):
    print(i)

Ülesanne

Kui teine argument ei ole esimesest suurem, siis ühtegi arvu vahemikus pole.

Kui on kolmaski argument, siis see näitab sammu, mis võib olla ka negatiivne. Nii annab range(0, 13, 2) arvud 0, 2, 4, 6, 8, 10, 12 ja range(4, -5, -3) arvud 4, 1, -2.

Muidugi saab ka erinevates kohtades muutujaid kasutada. Näiteks teeme programmi, mis küsib kasutajalt kaks täisarvu. Seejärel kirjutab ekraanile alates esimesest arvust üle ühe kõik täisarvud kuni teise arvuni (seda mitte kaasates). Ühtlasi leiab ka kõigi väljastatud arvude korrutise.

Näiteks, kui sisestatakse 4 ja 12, siis ekraanile väljastatakse: 4 6 8 10 Korrutis on 1920

Üks võimalik lahendus on selline. Korrutise puhul ei sobi algväärtuseks 0, sest korrutamine seda ei muudaks,

algus = int(input("Sisestage esimene arv "))
lõpp = int(input("Sisestage teine arv "))
korrutis = 1
for i in range(algus, lõpp, 2):
    print(i)
    korrutis *= i
print("Korrutis on " + str(korrutis))

Kontrollülesande 4.2 lahendamisel võib sellest näitest kasu olla.


< eelmine4. nädala sisukordjärgmine >
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused