Za vaje potrebuješ datoteko vremenske-postaje.txt. Poberi in odzipaj. Vsaka vrstica ima štiri podatke: ime vremenske postaje, datum meritve ter najvišjo in najnižjo izmerjeno temperaturo v tem dnevu.

  1. Kateri sta najvišja in najnižja temperatura, izmerjeni kadarkoli v Sloveniji (na eni od teh vremenskih postaj, ne drugo)? Odgovor: najvišja: - 40, najnižja: -32
Rešitev
najvisja_skupaj = -float("inf")
najnizja_skupaj = float("inf")

for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    najvisja, najnizja = int(najvisja), int(najnizja)

    if najvisja > najvisja_skupaj:
        najvisja_skupaj = najvisja
    if najnizja < najnizja_skupaj:
        najnizja_skupaj = najnizja
Lahko pa rešimo tudi tako:
najvisja_skupaj = -float("inf")
najnizja_skupaj = float("inf")

for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    najvisja, najnizja = int(najvisja), int(najnizja)

    najvisja_skupaj = max(najvisja, najvisja_skupaj)
    najnizja_skupaj = min(najnizja, najnizja_skupaj)
  1. Izpiši najvišje temperature, izmerjene na vsaki posamični postaji. Odgovor: Murska Sobota 40, Črnomelj 40, Maribor 40, Brnik 38, Lisca 35, ...
Rešitev
najvisje = {}
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    najvisja = int(najvisja)

    if kraj not in najvisje or najvisje[kraj] < najvisja:
        najvisje[kraj] = najvisja

for kraj, najvisja in najvisje.items():
    print(kraj, najvisja)
  1. Za vsako postajo zapiši največjo zabeleženo razliko med najnižjo in najvišjo temperaturo v istem dnevu. (Obstaja, na primer, kraj, v katerem se je v enem dnevu temperatura vzpela z -26 na 6. Mogoče te zanima tudi, kateri in kdaj?) Odgovor: Murska Sobota 29, Črnomelj 28, Maribor 24, Brnik 28, Lisca 17, ...
Rešitev
najvisje_razlike = {}
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    razlika = int(najvisja) - int(najnizja)

    if kraj not in najvisje_razlike or najvisje_razlike[kraj] < razlika:
        najvisje_razlike[kraj] = razlika

for kraj, naj_razlika in najvisje_razlike.items():
    print(kraj, naj_razlika)
  1. Za vse vremenske postaje izpiši povprečja najvišjih dnevnih temperatur. (Opomba: klic round(x, 1) zaokroži podano število x na eno decimalko.) Pazi: različni kraji imajo različno število meritev! Najbrž bosta potrebna dva slovarja. Odgovor: Murska Sobota 15.5, Črnomelj 17.1, Maribor 15.6, Brnik 14.9, Lisca 11.6, ...
Rešitev
from collections import defaultdict

vsote = defaultdict(int)
stevilo_temp = defaultdict(int)
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    vsote[kraj] += int(najvisja)
    stevilo_temp[kraj] += 1

for kraj, vsota in vsote.items():
    print(kraj, round(vsota / stevilo_temp[kraj], 1))
  1. Ponovi točke 1-4 samo za letošnje leto. :) (Spomni se, da imajo nizi metodo startswith.)
Rešitev Pri vsaki od rešitev je potrebno zgolj preveriti, da se datum začne z 2023. To narediš z datum.startswith("2023"). 1. Najvišja in najnižja temperatura:
najvisja_skupaj = -float("inf")
najnizja_skupaj = float("inf")

for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    najvisja, najnizja = int(najvisja), int(najnizja)

    if datum.startswith("2023"):
        najvisja_skupaj = max(najvisja, najvisja_skupaj)
        najnizja_skupaj = min(najnizja, najnizja_skupaj)
2. Najvišja temperature po postajah:
najvisje = {}
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    najvisja = int(najvisja)

    if datum.startswith("2023") and (kraj not in najvisje or najvisje[kraj] < najvisja):
        najvisje[kraj] = najvisja

for kraj, najvisja in najvisje.items():
    print(kraj, najvisja)
3. Najvišja razlika:
najvisje_razlike = {}
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    if datum.startswith("2023"):
        razlika = int(najvisja) - int(najnizja)

        if kraj not in najvisje_razlike or najvisje_razlike[kraj] < razlika:
            najvisje_razlike[kraj] = razlika

for kraj, naj_razlika in najvisje_razlike.items():
    print(kraj, naj_razlika)
4. Povprečje temperatur:
from collections import defaultdict

vsote = defaultdict(int)
stevilo_temp = defaultdict(int)
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    if datum.startswith("2023"):
        vsote[kraj] += int(najvisja)
        stevilo_temp[kraj] += 1

for kraj, vsota in vsote.items():
    print(kraj, round(vsota / stevilo_temp[kraj], 1))
  1. Izpiši imena vseh postaj in datume najstarejše meritev z vsake od njih. (Datumi so nizi, ki jih lahko primerjaš po abecedi; ker so oblike leto-mesec-dan, so starejši datumi prej po abecednem redu.) Odgovor: Murska Sobota - 1961-01-01, Črnomelj - 1989-01-01, Maribor - 1977-01-01, Brnik - 1964-01-01, Lisca - 1985-01-01, ...
Rešitev
najstarejse = {}
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    if kraj not in najstarejse or najstarejse[kraj] > datum:
        najstarejse[kraj] = datum

for kraj, najstarejsa in najstarejse.items():
    print(kraj, najstarejsa)
  1. Kakšne so najvišje izmerjene temperature v Ljubljani za posamične mesece v letu? Se pravi, kakšna je bila najvišja temperatura januarja, februarja itn? (Izbereš lahko tudi drug kraj, recimo Kredarico.) (Nasvet: datum razbij na leto, mesec in dan. Potem predalčkaš po mesecih.) Odgovor: Januar 16, Februar 22, Marec 25, April 29, Maj 33, ...
Rešitev
najvisje_mesec = {}
for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    if kraj == "Ljubljana":
        najvisja = int(najvisja)
        leto, mesec, dan = datum.split("-")

        if mesec not in najvisje_mesec or najvisje_mesec[mesec] < najvisja:
            najvisje_mesec[mesec] = najvisja

for mesec, najvisja in najvisje_mesec.items():
    print(mesec, najvisja)
  1. Kaj pa povprečne (najvišje) temperature po mesecih? Odgovor: Januar 2.4, Februar 5.5, Marec 10.8, April 15.7, Maj 20.7, ...
Rešitev
from collections import defaultdict

vsota_mesec = defaultdict(int)
stevilo_mesec = defaultdict(int)

for v in open("vremenske-postaje.txt"):
    kraj, datum, najvisja, najnizja = v.split(",")
    if kraj == "Ljubljana":
        najvisja = int(najvisja)
        leto, mesec, dan = datum.split("-")

        vsota_mesec[mesec] += najvisja
        stevilo_mesec[mesec] += 1

for mesec, vsota in vsota_mesec.items():
    print(mesec, round(vsota/stevilo_mesec[mesec], 1))
  1. Če ti je zmanjkalo, si očitno lahko izmisliš še veliko nalog. :) Ena zanimiva bi bila, recimo, kakšna je bila povprečna julijska temperatura v Ljubljani leta 1900, 1901, 1902 in tako naprej. Da vidimo, kako nam kaj gre globalno segrevanje...