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.

  1. Izpiši temperature v Ljubljani.
  2. Izpiši temperature (pare) v Ljubljani in Mariboru.
  3. Izpiši razlike med temperaturami v Ljubljani in Mariboru po dnevih.
  4. 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.

Last modified: Tuesday, 22 October 2019, 7:39 PM