Institute of Computer Science
  1. Courses
  2. 2023/24 spring
  3. Introduction to Programming II (MTAT.03.256)
ET
Log in

Introduction to Programming II 2023/24 spring

  • 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

  • 5. Testimine ja silumine. Rekursioon
  • 6. Rekursioon II
  • 7. Objektorienteeritud programmeerimine
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. Kui funktsiooni kasutamisel ei teadvustata, et argument muutub ja seda kasutatakse ka edaspidi, siis võib see kõrvalefekt põhjustada raskestiavastatavaid vigu.

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
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment