Coding 114

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 2

 Funkcijo lahko malo preobrnemo -- premešamo vrstice, katerih vrstni red ni pomemben.

 def n_odvisnikov(luna, orbite):


 odvisniki = lune(orbite)[luna]

 for x in odvisniki:
 n_odvisnikov(x, orbite)

 odvisnikov = 0
 odvisnikov += len(odvisniki)
 return odvisnikov
Zdaj pa pogledamo zadnje tri vrstice in uvidimo, da funkcija pravzaprav počne to:

def n_odvisnikov(luna, orbite):


odvisniki = lune(orbite)[luna]
for x in odvisniki:
n_odvisnikov(x, orbite)
return len(odvisniki)
Funkcija n_odvisnikov ne spreminja "sveta" okrog sebe. Klic te funkcija nima "stranskih učinkov". Ko
pokličemo n_odvisnikov(x, orbite) in zavržemo rezultat tega klica, je to isto, kot če bi funkcije sploh ne
klicali. Gornja funkcija je torej enaka kot

def n_odvisnikov(luna, orbite):


odvisniki = lune(orbite)[luna]
return len(odvisniki)
Kako to popraviti, sem nakazal zgoraj. Funkcijo n_odvisnikov(x, orbite) kličemo zato, da bi izračunala število
odvisnikov lune x. Ta rezultat moramo uporabiti, ne zavreči.

Prva rekurzivna funkcija, ki smo jo programirali, je bila vsota. Smo jo morda sprogramirali tako?

def vsota(s):
v = 0
vsota(s[1:])
v += s[0]
return v

Ocena 7
 Napiši funkcijo pot_do(odkod, kam, orbite), ki je podobna funkciji prestej_korake, vendar ne vrne števila
korakov temveč seznam lun na poti, vključno z odkod in kam. Funkcija naj ne bo rekurzivna. Rekurzivno različico
boš napisal za oceno 8.
 >>> pot("J", "C", orbite)
 ["J", "E", "D", "C"]
Spet smeš predpostaviti, da pot, po kateri sprašuje funkcija, obstaja.

Rešitev

Tole je čisto isto kot štetje korakov, le da zlagamo lune v seznam, ki ga na koncu vrnemo.

def pot_do(odkod, kam, orbite):


pot = [odkod]
while odkod != kam:
odkod = orbite[odkod]
pot.append(odkod)
return pot
 Napiši funkcijo pot_v_niz(pot), ki prejme seznam, kakršnega vrača prejšnja funkcija in vrne niz, v katerem so
lune ločene z znakom ->.
 >>> pot_v_niz(["J", "E", "D", "C"])
 "J -> E -> D -> C"
Rešitev

Iz te naloge lahko doktoriramo, lahko pa vemo, da imajo nizi metodo join.

def pot_v_niz(pot):
return " -> ".join(pot)
Če vemo o Pythonu kaj več, pa funkcijo kar priredimo. Celotna rešitev naloge je lahko kar.

pot_v_niz = " -> ".join


 Napiši funkcijo navodila(pot, ime_datoteke), ki prejme pot, kakršno vrne prejšnja funkcija in ime datoteke. V
datoteko shrani zapis navodil v obliki, ki jo kaže spodnji primer.

Klic navodila("F -> E -> D -> C -> B", "pot.txt") v datoteko pot.txt zapiše naslednje besedilo

Iz F pojdite na E.
Potem zavijte na D.
Potem zavijte na C.
Potem zavijte na B.
Vaš cilj, B, bo pod vami.
V prvi vrstici torej vedno piše "Iz ... pojdite na ...", v naslednji(h) pa "Potem zavijte na ...". Na koncu naj napiše, da
bo cilj pod vami.

You might also like