II OSA sisukord |
2.2 JÄRJEND JA FUNKTSIOON
Järjend funktsiooni argumendina
Programmide kirjutamisel on mõistlik püüda tööd jaotada erinevatest osadeks - alamprogrammideks ehk funktsioonideks. Funktsiooni teemat saate vajadusel korrata eelmise kursuse materjalidest. Pythonis on juba mitmeid defineeritud funktsioone, millele saab anda argumendiks järjendi, näiteks max
, min
ja len
, aga ka näiteks print
, kuigi talle saab ka paljusid teisi tüüpe argumendiks anda.
a = [2, -3, 5, 1] print(max(a)) print(min(a)) print(len(a)) print(a)
Järgmine funktsioon kontrollib, kas esimese argumendina antud järjendis on elemente, mis on suuremad teisest argumendist. Kui on, siis tagastatakse tõeväärtus True
ja kui pole, siis tõeväärtus False
.
def on_suuremaid(jarjend, piir): for i in range(len(jarjend)): if jarjend[i] > piir: return True return False
Oluline on tähele panna, et seda, et piirist suuremaid elemente ei leidu (return False
) saame öelda alles siis, kui kõik on läbi vaadatud. Leidumist saame kinnitada kohe, kui sellise leiame.
Pange tähele, et tegelikult saaks sama ülesannet lihtsamini lahendada funktsiooni max
abil. Kui maksimaalne element järjendist on piirist suurem, siis järelikult peaks tulemus olema tõene, vastasel juhul väär:
def on_suuremaid(jarjend, piir): return max(jarjend) > piir
Ülesanne
Funktsioonina võime realiseerida ka mõne varemtoodud konstruktsiooni. Tabelit väljastava funktsiooni puhul ei tagastata midagi (tegelikult tagastatakse None
). Küll aga toimub väljastamine.
def valjasta_tabel(tabel): for i in range(len(tabel)): for j in range(len(tabel[i])): print(tabel[i][j], end=" ") print() arvude_tabel = [[1, 3, 5], [4, 6, 6], [3, 6, -3]] valjasta_tabel(arvude_tabel) print() arvude_tabel2 = [[-1, 3, 5], [4, -8, 6]] valjasta_tabel(arvude_tabel2) print() riimitabel = [['karu', 'maru', 'taru'], ['haru', 'varu', 'naru']] valjasta_tabel(riimitabel)
Loomulikult võib funktsioon ka mingi väärtuse tagastada. Näiteks võib loendada, mitu positiivset elementi on esimese argumendina etteantud tabeli teise argumendina etteantud indeksiga veerus:
def positiivsete_arv_veerus(tabel, veeru_indeks): loendaja = 0 for rida in tabel: if rida[veeru_indeks] > 0: loendaja += 1 return loendaja
Ülesanne
Järjend funktsiooni väärtusena
Funktsioon võib tagastada samuti järjendi, kasvõi kahemõõtmelise järjendi.
Harjutamiseks koostame funktsiooni, millele antakse argumentidena kaks arvu: esimene näitab, kui suur ruutmaatriks tehakse ja teine, millega täidetakse peadiagonaal. Tahame, et funktsiooni rakenduse loo_diagonaalmaatriks(3, 1)
väärtuseks oleks [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
.
def loo_diagonaalmaatriks(jark, sisu): maatriks = [] for i in range(jark): # välimine tsükkel tekitab ridu rida = [] for j in range(jark): # sisemine hoolitseb veergude eest if i == j: # tegemist on peadiagonaali elemendiga rida.append(sisu) else: rida.append(0) maatriks.append(rida) return maatriks
Matemaatiliselt pole diagonaalmaatriksil tegelikult piirangut, et kõik peadiagonaali elemendid peaksid võrdsed olema.
Ülesanne
Ülesanne
Ülesanne
II OSA sisukord |