Temperaturne razlike
Tole so izmišljene najvišje dnevne temperature v nekaj slovenskih mestih v desetih avgustovskih dneh leta 2014. Ali 2015, pozabil sem. Glede na to, da so izmišljene, niti ni posebej pomembno. :)
ljubljana = [28, 30, 25, 28, 30, 32, 35, 28, 25, 27]
maribor = [30, 28, 26, 34, 26, 32, 34, 30, 28, 28]
celje = [28, 32, 30, 31, 32, 28, 27, 26, 25, 25]
koper = [32, 35, 35, 31, 32, 34, 35, 30, 28, 28]
kranj = [28, 27, 30, 32, 28, 27, 26, 28, 30, 25]
Teh pet vrstic skopiraj na začetek svojega programa.
Tisti, ki že znate kaj več: pri reševanju nalog ne uporabljaj indeksov. Resno. Koristno je, da se naučite pravilno programirati. :)
Ogrevanje
Teh programov ti ni potrebno oddati, lahko pa jih napišeš, da te bodo postopoma vodili do rešitve naloge.
- Izpiši temperature v Ljubljani.
- Izpiši temperature (pare) v Ljubljani in Mariboru.
- Izpiši razlike med temperaturami v Ljubljani in Mariboru po dnevih.
- Izpiši absolutne vrednosti razlik med temperaturami v Ljubljani in Mariboru po dnevih.
Obvezna naloga
Napiši program, ki izpiše največjo razliko med dnevno temperaturo v Ljubljani in Mariborom ter katero mesto je bilo na tisti dan toplejše. V gornjem primeru je razlika 6, toplejši pa je Maribor, torej program izpiše
6 Maribor
Da preveriš ali program res deluje, spremeni prvi dve vrstici v
ljubljana = [30, 28, 26, 34, 26, 32, 34, 30, 28, 28]
maribor = [28, 30, 25, 28, 30, 32, 35, 28, 25, 27]
in program mora izpisati
6 Ljubljana
Rešitev
Bistvu tule je, da se spomnite uporabe funkcije zip
in napišete for lj, ma in zip(ljubljana, maribor)
.
naj_raz = 0
toplejsi = ""
for lj, ma in zip(ljubljana, maribor):
if abs(lj - ma) > naj_raz:
naj_raz = abs(lj - ma)
if lj > ma:
toplejsi = "Ljubljana"
else:
toplejsi = "Maribor"
print(toplejsi, naj_raz)
V programu dvakrat računamo abs(lj - ma)
. Takih stvari se navadno poskušamo zmeniti.
razlika = abs(lj - ma)
if razlika > naj_raz:
naj_raz = razlika
Drugo, kar lahko reorganiziramo, je, kako si zapomnimo toplejšega izmed krajev. Namesto
if lj > ma:
toplejsi = "Ljubljana"
else:
toplejsi = "Maribor"
lahko pišemo
ljubljana_toplejsa = lj > ma
in potem, na koncu
if ljubljana_toplejsa:
print("Ljubljana", naj_raz)
else:
print("Maribor", naj_raz)
ali, na še dva načina, ki ju še ne poznamo
print(["Maribor", "Ljubljana"][ljubljana_toplejsa], naj_raz)
ali
print("Ljubljana" if ljubljana_toplejsa else "Maribor", naj_raz)
Dodatna naloga
Za vsak dan izračunaj poprečno temperaturo v vseh petih mestih. Program naj izpiše, na koliko dni je poprečna temperatura presegla 30 stopinj. Pri teh podatkih izpiše
4
Rešitev
Tule pa naredimo zip
prek petih stvari. Koristno bo, če se spomnimo, da od zip
-a dobimo terke. Lahko bi se šli
for lj, ma, ce, ko, kr in zip(ljubljana, maribor, celje, koper, kranj):
vsota = lj + ma + ce + ko + kr
vendar bomo raje naredili tako
presezeno = 0
for temperature in zip(ljubljana, maribor, celje, koper, kranj):
vsota = 0
for temperatura in temperature:
vsota += temperatura
if vsota / 5 > 30:
presezeno += 1
print(presezeno)
To pa zato, ker se bomo nekoč spomnili, da imamo funkcijo sum
, ki prejme seznam, terko ali kakršnokoli zaporedje števil in potem napisali kar
presezeno = 0
for temperature in zip(ljubljana, maribor, celje, koper, kranj):
vsota = sum(temperature)
if vsota / 5 > 30:
presezeno += 1
print(presezeno)
ali, zakaj ne
presezeno = 0
for temperature in zip(ljubljana, maribor, celje, koper, kranj):
if sum(temperature) / 5 > 30:
presezeno += 1
print(presezeno)
ali pa z nalogo opravili kar v eni vrstici
print(sum(sum(t) / 5 > 30 for t in zip(ljubljana, maribor, celje, koper, kranj)))
Ampak tega pa res še ne znamo.