6 Järjend ja funktsioon
Järjend funktsiooni argumendina
Programmide kirjutamisel on mõistlik püüda tööd jaotada erinevateks osadeks – alamprogrammideks ehk funktsioonideks. Funktsiooni teemat võid korrata programmeerimise õpiku materjalidest.
Pythonis on juba mitmeid defineeritud funktsioone, millele saab anda argumendiks järjendi, näiteks max
,
ja min
. Ka funktsioonile len
print
saab anda argumendiks järjendi.
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 piirist suuremate elementide puudumist (
) tohib kinnitada alles siis, kui kõik elemendid on läbi vaadatud. Leidumist saame kinnitada kohe, kui sellise elemendi leiame.return False
Pane tähele, et tegelikult saaks sama ülesannet lihtsamini lahendada funktsiooni
abil. Kui järjendi maksimaalne element on piirist suurem, siis on tulemus max
True
, vastasel juhul False
:
def on_suuremaid(jarjend, piir):
return max(jarjend) > piir
Enesekontroll (1 küsimus)
Funktsioonina võime realiseerida ka mõne varemtoodud konstruktsiooni. Tabelit väljastava funktsiooni puhul ei tagastata midagi (täpsemalt tagastatakse None
). See-eest toimub funktsiooni sees ekraanile väljastamine:
Näiteprogramm. Funktsiooniga 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 etteantud tabeli (esimene argument) etteantud indeksiga (teine argument) veerus:
def positiivsete_arv_veerus(tabel, veeru_indeks): loendaja = 0 for rida in tabel: if rida[veeru_indeks] > 0: loendaja += 1 return loendaja
Enesekontroll (1 küsimus)
Järjend funktsiooni väärtusena
Funktsioon võib tagastada järjendi, mis võib olla kahemõõtmeline (või rohkemgi).
Koostame funktsiooni
, mille argumendi loo_diagonaalmaatriks(n)
n
väärtus näitab, kui suur ruutmaatriks tehakse. Maatriksi peadiagonaali elementidele anname väärtuse 1 ja kõikjale mujale väärtuse 0. Näiteks väljakutsumine
peaks tagastama loo_diagonaalmaatriks(3)
[[1, 0, 0], [0, 1, 0], [0, 0, 1]]
. Kasutame ära teadmist, et peadiagonaali element on parajasti selline, mille rea- ja veeruindeks on võrdsed:
def loo_diagonaalmaatriks(n):
maatriks = []
for i in range(n): # välimine tsükkel tekitab ridu
rida = []
for j in range(n): # sisemine hoolitseb iga rea täitmise eest
if i == j: # tegemist on peadiagonaali elemendiga
rida.append(1)
else:
rida.append(0)
maatriks.append(rida)
return maatriks
Proovi funktsiooni täiendada nii, et sellele antakse ka teine argument, mille väärtus kirjutatakse 1 asemel peadiagonaali elementideks.
Enesekontroll (3 ülesannet)