Funkcije - Nauk.si

Download Report

Transcript Funkcije - Nauk.si

Python
Funkcije
Vgrajene funkcije
Kaj je funkcija?
Nek "kos" programske kode, ki nekaj dela!
Doslej
Vgrajene funkcije: print, input,
random.random, float, int,
math.sqrt, …
Opravijo neko delo in
Vrnejo rezultat
math.sqrt, random.random, input , int …
imajo le učinek
print
Kaj se zgodi, ko "pokličemo" funkcijo
Definicija funkcije vsebuje neko zaporedje stavkov
Ko jo pokličemo (navedemo njeno ime), se začno ti
stavki, ki jih je avtor funkcije napisal, izvajati
Ko pridemo do konca (ko se izvede zadnji stavek), se
"vrnemo" tja, kjer smo funkcijo poklicali
x = 2 + math.sqrt(14) + 3 – math.sqrt(2)
Če jo pokličemo drugič, se spet začno izvajati ti
stavki
"podatki" za funkcije
Imenujemo jih parametri
Vrednosti izrazov, ki jih navedemo ob klicu
Povemo, s čim naj funkcija začne računati, kakšna je določena začetna
vrednost spremenljivk "znotraj" v funkciji zapisanega postopka
math.sqrt(12.5)
Povemo, da želimo izračunati koren števila 12.5
Funkcije imajo lahko
En parameter
int(7 + 6.7)
Več parametrov
max(12, x, 1 + 5, 66, 12)
Ali pa so brez
random.random()
Primer
def vsotaStevil(a, b):
vsota = a + b
return vsota
Shranimo: MojeFun.py
Uporaba
import MojeFun
prvoStevilo = int(input('Prvi podatek: '))
drugoStevilo = int(input(Drugipodatek: '))
rez = MojeFun.vsotaStevil(prvoStevilo, drugoStevilo)
print(rez)
Kako ustvarimo svojo funkcijo
Glava
Rezervirane beseda def
sledi ime funkcije
ime naj bo takšno, da lahko iz njega sklepamo, kaj funkcija počne
(
Obvezno, tudi če ni parametrov!
imena parametrov
Če je parametrov več, jih ločimo s vejicami.
) :
Telo
stavki, ki se bodo izvršili vsakič, ko bomo funkcijo poklicali.
zamik stavkov obvezen
enak
Konec funkcije
Ko se izvede zadnji stavek v telesu
Ali ko se izvede ukaz return
return
return izraz
Funkcija kot svoj rezultat vrne vrednost izraza
Običajno je to zadnji stavek v funkciji
Ni pa nujno (pogojni stavki)
V telesu je lahko več ukazov return
Če ima funkcija le učinek
Ukaza return ni
Zgled
Sestavimo funkcijo, ki iz trimestnega
naravnega število naredi novo število tako, da
prvotnemu "obrne" vrstni red števk
Iz 124 dobimo 421
Iz 793 dobimo 397
Iz 112 dobimo 211
Ideja 0:
Število razbijemo na enice, desetice in stotice
Izpišemo najprej enice, nato desetice in potem
stotice
Funkcija
Opisni komentar, izpiše se s
help(VseTrimestno.obrniTrimestno)
def obrniTrimestno(n):
''' Funkcija obrne trimestno naravno število
Predpostavljamo, da je podano res trimestno
število
'''
enice = n % 10
desetice = n // 10 % 10
stotice = n // 100
print('Iz ', n, ' smo naredili ', /
enice, desetice, stotice, sep = '')
Shranimo na
VseTrimestno.py
nadaljevanje
vrstice
Testna opisna datoteka (skripta)
# Testno okolje za obračanje tromestnih števil
import VseTrimestno # tu so ustrezne funkcije
prvo = 234
VseTrimestno.obrniTrimestno(prvo)
TestTromestno.py
Razlika med opisno datoteko in
datoteko z definicijo funkcije
Opisna datoteka (skripta)
Vsebuje ukaze, kot bi jih tipkali neposredno v ukazno lupino
Ukazi se izvajajo drug za drugim, kot so napisani
Z uporabo F5 izvedemo vse ukaze, ki so na opisni datoteki
Definicija funkcije
Vsebuje opis, kako deluje funkcija
Ukazi se bodo izvedli šele, ko funkcijo pokličemo
Če uporabimo F5, se bo ukazna lupina le "naučila" te definicije
Drugega se ne izvede nič
Lahko pa sedaj to funkcijo kličemo v ukazni lupini
Navedemo le njeno ime
ni potrebno
import imeDatoteke
imeDatoteke.imeFunkcije
Ideja 1
Zakaj ideja 0 ni prav?
Saj dobimo izpis
Iz 234 smo naredili 432
Hočemo novo število in ne le "pravi izpis"
Nova ideja:
Število razbijemo na enice, desetice in stotice
Enice množimo s 100, desetice z 10 in stotice z 1
ter seštejemo
Funkcija po ideji 1
def obrniTrimestno1(n):
''' Funkcija obrne trimestno naravno število
Predpostavljamo, da je podano res trimestno število
'''
enice = n % 10
desetice = n // 10 % 10
stotice = n // 100
novoŠtevilo = enice * 100 + desetice * 10 + stotice
print('Iz ', n, ' smo naredili ', novoŠtevilo)
Ampak še vedno ni čisto v redu
Zakaj?
Denimo, da želimo izračunati razliko med
prvotnim in obrnjenim številom.
Si lahko pomagamo z našo funkcijo?
Ne, saj ne dobimo rezultata
Le učinek (izpis)
Na konec dodamo
return novoŠtevilo
Različica 2
def obrniTrimestno2(n):
''' Funkcija vrne obrnjeno trimestno naravno število
Predpostavljamo, da je podano res trimestno število
'''
enice = n % 10
desetice = n // 10 % 10
stotice = n // 100
novoŠtevilo = enice * 100 + desetice * 10 + stotice
print('Iz ', n, ' smo naredili ', novoŠtevilo)
return novoStevilo
Ampak …
Po nepotrebnem "packamo" po zaslonu
Kdo pravi, da želimo obrnjeno število izpisati
Pravilo:
V funkciji ne izpisujemo nič
Razen seveda, če hočemo početi le to!
Tisti, ki funkcijo pokliče, se odloči, kaj bo
naredil z rezultatom
Izpisal, uporabil pri nadaljnjem računanju, oboje
…
Zato …
def obrniTrimestno3(n):
''' Funkcija vrne obrnjeno trimestno naravno število
Predpostavljamo, da je podano res trimestno število
'''
enice = n % 10
desetice = n // 10 % 10
stotice = n // 100
novoŠtevilo = enice * 100 + desetice * 10 + stotice
return novoŠtevilo
Ideja 2
Število razbijemo na enice, desetice in stotice
Števila pretvorimo v nize
Ustrezno "zlepimo" skupaj nize
In niza naredimo spet število
Koda
def obrniTrimestno4(n):
''' Funkcija vrne obrnjeno trimestno naravno število
Predpostavljamo, da je podano res trimestno število
'''
enice = n % 10
desetice = n // 10 % 10
stotice = n // 100
# sestavimo novo število
novoNiz = str(enice) + str(desetice) + str(stotice)
# zlepimo števke
novoŠtevilo = int(novoNiz) # naredimo iz tega spet število
return novoŠtevilo
Funcija kliče funkcijo
Vsaka "naša" funkcija se obnaša kot vgrajena
Zato jo lahko kličemo tudi pri drugih naših
funkcijah
Če je definirana v isti datoteki
imeFunkcije
Če je definirana v drugi datoteki
Najprej: import imeDatoteke
Klic: imeDatoteke.imeFunkcije
Zgled
Sestavimo funkcijo, ki izpiše razliko med
številom in obrnjenim tem številom
Koda
def razlikaZObratom(število):
''' izpišemo razliko med številom stevilo
in obrnjenim številom
'''
obŠtevilo = obrniTrimestno4(število)
razlika = število - obŠtevilo
print('Razlika med', število,
'in njegovimo obratom je', razlika)
Zgled
Za dano trimestno število ugotovi, ali je "palindrom"
Torej, ali se naprej prebere enako kot nazaj
Sestavimo funkcijo, ki izpiše
212 je palindrom
oziroma
231 ni palindrom
Ideja:
Izračunamo razliko
Če je …
Težave …
Eni stavki, če je razlika 0 in drugi, če drugače!