Tour de Slovenie
Naloga vsebuje teste. Naloga je rešena samo, če prestane vse teste.
Obvezna naloga
Napiši funkcijo
podatek(kljuc, podatki)
, ki dobi neko vrednostkljuc
in nek seznam parov. Med njimi mora poiskati tisti, par, pri katerem je prva vrednost enaka podanemu ključu; funkcija mora vrniti drugo vrednost.- Klic
podatek("Berta", [("Ana", 156), ("Berta", 167), ("Cilka", 160)])
vrne 167. - Klic
podatek(42, [(42, "6 * 8"), (33, "11 * 3")])
vrne"6 * 8"
. - Klic
podatek("Koper", [('Piran', (0, 0)), ('Koper', (8, 2)), ('Žiri', (39, 60))])
vrne(8, 2)
. - Klic
podatek("Žiri", [("Piran", 23), ("Koper", 4), ("Žiri", 481)])
vrne 481.
- Klic
Če ključa ne najde, (npr. v klicu podatek("Žiri", [("Piran", 23), ("Koper", 4)])
) mora vrniti None
.
Napiši funkcijo
razdalja(t1, t2)
, ki prejme dve terki, ki predstavljata koordinati točk na ravnini. Vrniti mora evklidsko razdaljo med točkama. Klicrazdalja((0, 0), (3, 4))
mora vrniti5
.Napiši funkcijo
oddaljenost(kraj1, kraj2, koordinate)
, ki prejme imeni dveh krajev in seznam, ki vsebuje koordinate krajev v takšni obliki, kot ga vidiš v tretjem primeru pri prvi funkciji. Funkcija mora vrniti evklidsko razdaljo med krajema. (Dober nasvet: funkcija naj kliče prejšnji funkciji.) Predpostaviti smeš, da se koordinate obeh krajev nahajo v seznamu.Napiši funkcijo
visina(kraj1, kraj2, visine)
, ki prejme imeni dveh krajev in višine krajev v seznamu, kot ga vidiš v četrtem primeru pri prvi funkciji. Funkcija naj vrne višinsko razliko (vzpon) od prvega kraja do drugega; če je prvi višji, funkcija vrne negativno vrednost. Spet smeš predpostaviti, da sta višini obeh krajev znani.Napiši funkcijo
cas(s, h)
, ki vrne čas, ki ga porabi nek kolesar, da prevozi pot dolžines
(v kilometrih), ki se dvigne zah
(v metrih;h
je lahko tudi negativen, če gre za spust). Čas izračunamo tako:- kolesar v osnovi porabi 2,4 minute za kilometer razdalje.
- Če gre za dvig, porabi poleg tega še 1 / 12 minute za vsak meter višine;
- če gre za spust, pa se čas zmanjša za 1 / 250 minute za vsak meter spusta.
Primera:
- Klic
cas(2, 300)
vrne 29,8: za 2 km porabi 2 * 2,4 = 4,8 minut, poleg tega pa porabi 1 / 12 * 300 = 25 minut zaradi 300 m dviga. - Klic
cas(10, -100)
vrne 23,6: za 10 km porabi 10 * 2,4 = 24 minut, vendar se to zmanjša za 100 / 250 = 0.4 minute zaradi spuščanja.
(Posebej drugi primer kaže, da vsaka podobnost te formule z resničnimi dogodki ni zgolj naključna temveč tudi ne prav zelo verjetna.)
Napiši funkcijo
cas_med(kraj1, kraj2, koordinate, visine)
, ki vrne čas, ki ga bo kolesar potreboval za vožnjo od prvega do drugega kraja. Pomen argumentov in formule so takšne kot v prejšnjih nalogah. (Uporabljaj funkcije, ki jih že imaš!)Napiši funkcijo
skupni_cas(kraji, koordinate, visine)
, ki prejme seznam krajev, skozi katere bo šel kolesar, in vrne skupni čas, ki ga bo porabil za to pot.
Dodatna naloga
Kolesar bi rad čimbolj skrajšal čas potovanja. Izpustiti sme en kraj - lahko prvega, lahko zadnjega, lahko kateregakoli vmes.
Napiši funkcijo skrajsaj(kraji, koordinate, visine)
, ki vrne seznam brez tega kraja. Klic skrajsaj(["Piran", "Ljubljana", "Koper"], koordinate, visine)
vrne ["Piran", "Koper"]
. Enak rezultat vrneta tudi klica skrajsaj(["Ljubljana", "Piran", "Koper"], koordinate, visine)
in skrajsaj(["Piran", "Koper", "Ljubljana"], koordinate, visine)
.
Testi
- 2. november 2021, 22:25