Arvutiteaduse instituut
  1. Kursused
  2. 2025/26 sügis
  3. Programmeerimine (LTAT.03.001)
EN
Logi sisse

Programmeerimine 2025/26 sügis

  • Üldinfo
  • 1. Muutuja ja avaldis
  • 2. Tingimuslause
  • 3. Funktsioon
3.1 Funktsioon
3.2 Veel funktsioonidest
3.3 Kodutöö
3.4 Harjutused
3.5 Silmaring: andmebaasid
  • 4. Korduslause
  • 5. Sõned. Lihtsam failitöötlus
  • 6. Kontrolltöö 1
  • 7. Järjend
  • 8. Järjend 2
  • 9. Kahekordne tsükkel. Failitöötlus
  • 10. Andmestruktuurid
  • 11. Andmestruktuurid 2
  • 12. Kontrolltöö 2
  • 13. Objektorienteeritud programmeerimine
  • 14. Objektorienteeritud programmeerimine 2
  • 15. Rekursioon
  • 16. Kordamine. Projektide esitlused
  • Viiteid
  • Silmaringimaterjalid
  • Materjalid

Veel funktsioonidest

Print vs return

Uuri kaht järgnevat programmi, kus mõlemas on defineeritud funktsioon ringi pindala arvutamiseks. Mõlemal juhul on meie eesmärgiks arvutada ringi pindala ja kuvada tulemus ekraanile.

Programm 1:

from math import pi

def ringi_pindala(raadius):
    print(f"Pindala on {pi * raadius**2}")


ringi_pindala(16.5)

Programm 2

from math import pi

def ringi_pindala(raadius):
    return pi * raadius**2


print(f"Pindala on {ringi_pindala(16.5)}")

Kui sooviksime arvutuse tulemust näidata ainult ekraanil, siis tehniliselt pole vahet, kas me kasutame print käsklust funktsiooni sees või väljaspool. Erinevus tuleb sisse, kui me soovime tulemust veel kuskil kasutada, näiteks teha edasisi arvutusi – meie esimeses programmis olev funktsioon siis enam ei sobi. Teises variandis on funktsioon defineeritud üldisemana ja seetõttu saab seda kasutada rohkemates situatsioonides. Ilus oleks muidugi tagastatud tulemus ümardada return round(pindala, 2), aga vahepealsete tulemuste ümardamisega peab olema ettevaatliks, sest võib mõjutada lõpptulemuse täpsust!

Vaikeväärtus

Mõnikord on konkreetse argumendi väärtus peaaegu alati sama ja oleks tüütu seda iga kord uuesti ette anda. Sellisel juhul saame kasutada vaikeväärtust. Kui funktsiooni väljakutsel pole seda argumenti näidatud, siis saab argumendi väärtuseks vaikeväärtus:

Näiteprogramm. Vaikeväärtusega funktsioon

def kasKiiruseÜletamine(kiirus, piirkiirus = 90):
    return kiirus > piirkiirus

print(kasKiiruseÜletamine(100))
print(kasKiiruseÜletamine(90, 70))

Vaikeväärtus on ka funktsiooni print argumendil end, millega määratakse väljastatava sõne lõppu lisatav(ad) sümbol(id). Vaikimisi on lõpus reavahetus, sest argument on vaikimisi end = "\n". Me võime sellele argumendile anda ka teistsuguse väärtuse:

print("Kartul on ", end = "kollane.")

Näiteks, kui tahame, et rida ei lõppeks reavahetusega, siis saame sellele argumendile anda väärtuseks tühja sõne:

print("Kartul on ", end = "")
print("kollane.")

Mitu funktsiooni koos

Vaatame programmi, kus funktsioone kasutatakse nii, et ühe väärtus on teise argumendiks:

ümardatud_sisestatud_arv = round(float(input("Sisestage arv: ")))
print(f"See arv ümardatult on {ümardatud_sisestatud_arv}")

Katseta seda suhteliselt kokkusurutud programmi erinevate komakohtadega arvudega. Selle esimesel real sooritatakse hulk tegevusi. Tegevused algavad "seestpoolt".

  • Funktsiooniga input küsitakse kasutaja käest arv. Funktsiooni input väärtus on sõnetüüpi.
  • Funktsioon float võtab argumendiks sõne ja tema enda väärtuseks saab vastav ujukomaarv. Teiste sõnadega: funktsioon tagastab vastava ujukomaarvu. Või veel kõnekeelsemalt: funktsioon muudab sõne vastavaks ujukomaarvuks.
  • Funktsioon roundvõtab argumendiks ujukomaarvu ja ümardab selle täisarvuks.

Lõpuks määratakse see täisarv muutuja ümardatud_sisestatud_arv väärtuseks.

Niimoodi teise funktsiooni argumendiks saab olla ainult väärtust tagastav funktsioon. Sellisena saab muidugi kasutada ka isekirjeldatud funktsioone:

def summa(x,y):
    return x + y


a = summa(summa(1, 3)*2, 4)

Main-funktsioon

Kuna põhiprogrammis võib olla mitmeid käsklusi, siis oleks hea neid struktuurselt omakorda koondada ühte põhifunktsiooni, mille nimi võiks olla main. See omakorda tähendab, et siis peaks seda funktsiooni main ka programmi lõpus välja kutsuma.

Sellisel juhul oleks kogu programm selline:

from math import pi


def ringi_pindala(raadius):
    pindala = pi * raadius**2
    return round(pindala, 2)


def main():
    print(ringi_pindala(5))
    print(ringi_pindala(10))


main()

Programmmide kirjutamisel tuleb tulevikus kasuks funktsiooni main() välja kutsuda programmi lõpus if-lauseosas, et vältida importimisel peafunktsiooni käivitamist. Seda just seepärast, et kui tulevikus tahate oma varasemaid programme teegina kasutada, siis oleks importimine võimalik ilma põhiosa jooksutamata. Pythoni standardteekide kohta saab lugeda silmaringimaterjalist Silmaring. Standardteek ja moodulid. Seega mõistlik main-funktsiooni väljakutsumine näeks välja nii:

from math import pi


def ringi_pindala(raadius):
    pindala = pi * raadius**2
    return round(pindala, 2)


def main():
    print(f"Ringi pindala on {ringi_pindala(5)}")


if __name__ == "__main__":
    main()

Tüüpimine

Funktsioonide puhul oleks hea teada, mis tüüpi argumentide väärtusi funktsioon ootab ja mis tüüpi väärtuse funktsioon tagastab. Selleks on võimalik määrata muutujatele ka vaikimisi tüübi täisarvu puhul int, ujukomaga arvu puhul float, sõne puhul str.

Näiteks peatüki alguses oleva ringi pindala arvutamise näite puhul saame määrata, et oodatakse täisarvu ehk int tüüpi argumenti ja tagastatav väärtus on ujukomaarvu float tüüpi:

from math import pi

def ringi_pindala(raadius: int) -> float:
    pindala = pi * raadius**2
    return round(pindala, 2)

def main():
    print(f"Ringi pindala on {ringi_pindala(5)}")


if __name__ == "__main__":
    main()

NB! Selline tüübi määramine ei takista funktsioonile teist tüüpi argumendi andmist, vaid on pigem informatiivne ja on abiks intelligentsemate koodiredaktoritega suurte projektidega töötamisel.

  • 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