Arvutiteaduse instituut
  1. Kursused
  2. 2016/17 kevad
  3. Programmeerimise alused II (LTAT.TK.001)
EN
Logi sisse

Programmeerimise alused II 2016/17 kevad

  • Kursuse info
  • 1. Kahemõõtmeline järjend
  • 2. Kahekordne tsükkel
  • 3. Andmestruktuurid
  • 4. Viitamine ja muteerimine

4.1 Viitamine 4.2 Muteerimine 4.3 Järjendi muteerimine 4.4 Funktsioon ja muteerimine 4.5 Kordamine 4.6 Silmaring: Objekt-orienteeritud programmeerimine

  • 5. Testimine ja silumine. Rekursioon
  • 6. Rekursioon II
  • 7. Projekt?
  • Korraldajad
IV OSA sisukord

4.4 FUNKTSIOON JA MUTEERIMINE

Järjenditega tegutsemiseks on erinevad funktsioone ja muidugi saame neid juurde luua. Funktsioon ja järjend saavad olla seotud mitmel moel. Enamasti on Pythonis juba olemasolevad järjendite funktsioonid seotavad järjendiga punkti abil, nt

jarjend.append()
jarjend.insert()
jarjend.count()
jarjend.copy()
jarjend.reverse()
jarjend.sort()
jarjend.clear()

Selliseid funktsioone nimetatakse meetoditeks. Tegemist on objektorienteeritud lähenemisega, millest on juttu ka selle nädala silmaringimaterjalis.

Meie aga loome funktsioone, kus järjend antakse ette argumendina. Ükskõik kuidas järjendiga seos korraldatud on, tuleb silmas pidada, kas see järjend ise funktsiooni töö jooksul muutub või mitte.

Koostame kaks funktsiooni, mis nagu teeksid sama asja, aga ühel juhul argumendina antud järjend muutub ja teisel mitte.

Olgu ülesandeks argumendina antud järjendi elementide nullimine. Esialgu teeme sellise funktsiooni, mis muudab argumendina antud järjendit.

def muuda_nullideks(jarj):
    for i in range(len(jarj)):
        jarj[i] = 0

jarjend = [2, 5, -2, 4]
muuda_nullideks(jarjend)
print(jarjend)

Kui vaatame, mis väärtuse see funktsioon tagastab, ja mis tüüpi see väärtus on, siis saame:

print(muuda_nullideks(jarjend))
print(type(muuda_nullideks(jarjend)))

mis annab tulemuse

None
<class 'NoneType'>

Niisiis ei tagastata funktsioon nagu midagi - None just seda märgibki. Kui nüüd tahaksime selle funktsiooni väärtuse uuele muutujale anda, siis saab sellegi väärtuseks None. Sellise funktsiooni puhul ongi olulisem see n-ö kõrvalefekt, milleks on antud juhul järjendi muutmine.

Teeme nüüd funktsiooni, mis tagastaks vastava nullitud järjendi ja argumendina antud järjendit ei muudaks:

def tagasta_nulliline(järj):
    uus_järj = []
    for i in range(len(järj)):
        uus_järj.append(0)
    return uus_järj


järjend2 = [4, -5, 2, 3]
print(tagasta_nulliline(järjend2))
print(järjend2)

Nüüd saame ka funktsiooni rakenduse väärtuse uuele muutujale anda:

uus_järjend = tagasta_nulliline(järjend2)

Saab koostada ka funktsiooni, mis nii muudab argumenti, kui ka tagastab väärtuse. See võib aga olla murede allikaks, sest argumenti muutev kõrvalefekt võib olla häiriv ja üllatuslik.

def muuda_nullideks_tagasta(järj):
    for i in range(len(järj)):
        järj[i] = 0
    return järj

järjend3 = [7, -3, -1, 6]
print(muuda_nullideks_tagasta(järjend3))
print(järjend3)

Laiendame neid programme kahemõõtmelise järjendi juhule.

def muuda_nullideks2D(jär2d):
    for i in range(len(jär2d)):
        for j in range(len(jär2d[i])):
            jär2d[i][j] = 0

tabel = [[1, 5, 6], [-5, 7, 2]]
muuda_nullideks2D(tabel)
print(tabel)

def tagasta_nulliline2D(jär2d):
    uus_jär2d = []
    for i in range(len(jär2d)):
        uus_rida = []
        for j in range(len(jär2d[i])):
            uus_rida.append(0)
        uus_jär2d.append(uus_rida)
    return uus_jär2d


tabel2 = [[-1, 2, 3], [5, -1, 3]]
print(tagasta_nulliline2D(tabel2))
print(tabel2)

IV OSA sisukord
  • 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.
Tartu Ülikooli arvutiteaduse instituudi kursuste läbiviimist toetavad järgmised programmid:
euroopa sotsiaalfondi logo