Naloge: Še malo igranja s funkcijami (nadaljevanje od prejšnjič)
- Napiši funkcijo
zaokrozena3(f)
, ki kot argument prejme poljubno funkcijof(x)
(na primersqrt
alisin
), in vrne funkcijo, ki vrača isti rezultat kotf(x)
, zaokrožen na tri decimalke. Uporabiš lahko funkcijoround(x, n)
, ki zaokroži podanix
nan
decimalk.
Podobno kot v prejšnji nalogi boš definiral funkcijo znotraj funkcije.
"Notranja" funkcija bo poklicala f
in njen rezultat zaokrožila na tri
decimalke.
Klic
tabeliraj(range(1, 11), [zaokrozena3(sqrt)])
mora izpisati
x krneki
1 1.0
2 1.414
3 1.732
4 2.0
5 2.236
6 2.449
7 2.646
8 2.828
9 3.0
10 3.162
Ignoriraj prvo vrstico, imena, ki bodo pač ... kr neki.
Napiši funkcijo
poziralka
, ki prejme poljubno število argumentov, vključno s poimenovanimi argumenti ... in vrne 42.Napiši funkcijo
poklici(f, ...)
, ki prejme funkcijo in poljubno število poljubnih argumentov. Funkcija naj pokliče to funkcijo s temi argumenti in vrne njen rezultat. Če torej pokličemopoklici(log, 16, 2)
naj funkcija vrne enak rezultat, kot če bi poklicalilog(16, 2)
.(težja) Če se že dolgočasiš, preberi kaj o dekoratorjih v Pythonu in spremeni
zaokrozena3
v dekorator (ali pa ga le uporabi - morda ga ni potrebno spreminjati).(začetek težje) Napiši funkcijo
zaokrozena(f, k)
, ki dela podobno reč kotzaokrozena3(f)
, vendar povemo, na koliko decimalk naj zaokroža.
Poskusi
tabeliraj(range(1, 11), [zaokrozena(sqrt, 1), zaokrozena(sqrt, 5)])
naj izpiše
x krneki krneki
1 1.0 1.0
2 1.4 1.41421
3 1.7 1.73205
4 2.0 2.0
5 2.2 2.23607
6 2.4 2.44949
7 2.6 2.64575
8 2.8 2.82843
9 3.0 3.0
10 3.2 3.16228
- (veliko težja) Spremeni
zaokrozena
v dekorator.