Vaje
Completion requirements
- Napiši funkcijo
min_leto(meritve)
, ki prejme meritve, kakršne vrne funkcijapreberi_meritve
(s prejšnji vaj) ter vrne prvo polno leto obratovanja postaje. Če začne postaja obratovati 1. januarja 1953, vrne 1953. Če začne obratovati 3. februarja 1953, pa vrne 1953.
Rešitev
def min_leto(meritve):
najmanjse_leto = float("inf")
for leto, _, _ in meritve:
if leto < najmanjse_leto:
najmanjse_leto = leto
return najmanjse_leto
- Napiši funkcijo
mesecno_povprecje(leto, mesec, meritve)
, ki vrne povprečno mesečno temperaturo za podani mesec in leto. Če za ta mesec in leto ni meritev, naj vrneNone
.
Rešitev
def mesecno_povprecje(leto, mesec, meritve):
temperature = []
for dan in range(1, 32):
datum = (leto, mesec, dan)
if datum in meritve:
temperature.append(meritve[datum])
if temperature:
return sum(temperature) / len(temperature)
else:
return None
- Napiši funkcijo
izpis_povprecij(meritve)
, ki prejme meritve in izpiše
1992/01: 7.42 *******
1992/02: 9.80 **********
1992/03: 12.82 *************
1992/04: 17.16 *****************
1992/05: 23.84 ************************
1992/06: 24.43 ************************
1992/07: 28.21 ****************************
1992/08: 31.73 ********************************
1992/09: 24.28 ************************
1992/10: 16.72 *****************
1992/11: 13.35 *************
1992/12: 8.72 *********
1993/01: 7.09 *******
1993/02: 10.79 ***********
1993/03: 12.79 *************
1993/04: 17.87 ******************
1993/05: 24.85 *************************
1993/06: 26.17 **************************
1993/07: 27.31 ***************************
1993/08: 30.06 ******************************
1993/09: 21.78 **********************
1993/10: 18.01 ******************
1993/11: 10.11 **********
1993/12: 9.40 *********
1994/01: 10.46 **********
1994/02: 8.65 *********
1994/03: 16.29 ****************
1994/04: 16.89 *****************
1994/05: 21.67 **********************
1994/06: 26.35 **************************
1994/07: 31.62 ********************************
1994/08: 30.73 *******************************
1994/09: 24.39 ************************
1994/10: 17.74 ******************
1994/11: 14.87 ***************
1994/12: 9.07 *********
... in tako naprej
za vsa leta, odkar deluje postaja. Številke so povprečne temperature za te mesece v tem letu. Zvezdic je toliko, kolikor je zaokrožena povprečna temperatura. (Funkcija round(x)
zaokroži x
na nabližje celo število. Če je x
float
, bo rezultat je še vedno float
; če potrebujemo int
, pišemo int(round(x))
.)
Rešitev
def izpis_povprecij(meritve):
zacetno_leto = min_leto(meritve)
for leto in range(zacetno_leto, 2023):
for mesec in range(1, 13):
povprecje = mesecno_povprecje(leto, mesec, meritve)
if povprecje is not None:
zvezdice = "*" * round(povprecje)
print(f"{leto}/{mesec:02}: {povprecje:5.2f} {zvezdice}")
print()
- Napiši funkcijo
mesecna_povprecja(meritve)
, ki izračuna dolgoletne povprečne mesečne temperature. Konkretno, funkcija naj izračuna povprečje prek vseh temperatur, ki jih za leta delovanja postaje vrača prej napisana funkcijamesecno_povprecje
.
Rešitev
def mesecna_povprecja(meritve):
povprecja = {}
najmanjse_leto = min_leto(meritve)
for mesec in range(1, 13):
povprecja_mesec = []
for leto in range(najmanjse_leto, 2023):
povprecje = mesecno_povprecje(leto, mesec, meritve)
if povprecje is not None:
povprecja_mesec.append(povprecje)
povprecja[mesec] = sum(povprecja_mesec) / len(povprecja_mesec)
return povprecja
- Napiši funkcijo
izpis_sprememb(meritve)
, ki ima podoben izpis kotizpis_povprecij
, vendar doda "stolpec", iz katerega je razvidno, za koliko je izpisano povprečje večje ali manjše od dolgoletnega.
2022/01: 9.66 (+1.34) **********
2022/02: 12.22 (+2.00) ************
2022/03: 15.02 (+0.78) ***************
2022/04: 17.68 (-0.81) ******************
2022/05: 25.60 (+2.46) **************************
2022/06: 31.01 (+3.71) *******************************
2022/07: 33.74 (+3.99) **********************************
2022/08: 31.93 (+2.14) ********************************
2022/09: 24.17 (+0.37) ************************
2022/10: 23.16 (+4.05) ***********************
2022/11: 15.03 (+1.36) ***************
2022/12: 9.45 (+0.25) *********
Kako dodati tisti +
ali -
, najdeš v opisu minijezika za oblikovanje nizov.
Rešitev
def izpis_sprememb(meritve):
zacetno_leto = min_leto(meritve)
poprecja_meseci = mesecna_povprecja(meritve)
for leto in range(zacetno_leto, 2023):
for mesec in range(1, 13):
povprecje = mesecno_povprecje(leto, mesec, meritve)
if povprecje is not None:
zvezdice = "*" * round(povprecje)
odklon = povprecje - poprecja_meseci[mesec]
print(f"{leto}/{mesec:02}: {povprecje:5.2f} ({odklon:+.2f}) {zvezdice}")
print()
- Napiši funkcijo
zadnjih_10(ime_datoteke, meritve)
, ki v datoteko s podanim imenom zapiše povprečne mesečne (vrstice) temperature za zadnjih deset let (stolpci). Datoteka mora biti takšne oblike:
,2012,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022
1,8.72,8.32,10.68,9.96,8.32,6.38,10.20,7.85,10.70,8.09,9.66
2,6.99,8.36,12.13,10.29,11.23,10.90,7.24,13.85,13.25,11.87,12.22
3,18.71,11.02,17.19,15.00,14.18,17.53,11.32,16.90,14.46,14.83,15.02
4,17.21,18.73,19.80,18.51,19.20,23.14,21.72,18.37,21.01,16.46,17.68
5,23.24,20.74,22.25,23.26,22.49,,25.73,18.93,22.95,20.74,25.60
6,27.77,26.92,27.53,28.10,26.52,,28.09,31.03,25.71,29.59,31.01
7,30.68,32.12,27.45,32.14,30.98,30.28,30.73,30.91,29.49,30.80,33.74
8,32.14,31.06,26.83,30.65,29.71,32.21,32.19,31.01,30.19,29.95,31.93
9,25.43,24.33,23.50,24.22,27.22,21.54,26.93,8.49,25.99,26.61,24.17
10,19.26,18.85,20.39,18.66,17.92,19.71,21.52,20.59,18.90,18.75,23.16
11,14.74,13.94,15.79,14.29,13.39,13.58,14.62,14.90,14.61,14.01,15.03
12,8.13,11.25,9.61,10.46,11.65,8.92,9.54,11.38,10.08,9.32,9.45
Rešitev
def zadnjih_10(ime_datoteke, meritve):
datoteka = open(ime_datoteke, "w")
# pripravimo in zapisemo prvo vrstico z leti
leta = [""]
for leto in range(2012, 2023):
leta.append(str(leto))
datoteka.write(",".join(leta) + "\n")
# pripravimo in zapisemo podatke
for mesec in range(1, 13):
povprecja = [str(mesec)]
for leto in range(2012, 2023):
povprecja.append(f"{mesecno_povprecje(leto, mesec, meritve):.2f}")
datoteka.write(",".join(povprecja) + "\n")
datoteka.close()
Datoteko lahko uvoziš v Excel in narišeš kakšen graf. (Ne vem, kaj je s septembrom 2019. Lahko odkriješ in poročaš.)
Last modified: Wednesday, 4 December 2024, 9:41 AM