Datoteke, ki jih potrebujete za reševanje teh nalog, najdete na https://ucilnica.fri.uni-lj.si/mod/resource/view.php?id=53247.

Primeri s predavanj

Nič ne bo škodilo, če to narediš znova - s čim manj škiljenja v zapiske. :)

  1. Izpiši vse temperature v datoteki temperature.txt.
Rešitev
for vrstica in open("temperature.txt"):
    print(int(vrstica))
  1. Izpiši vse temperature, vendar pretvorjene v Fahrenheite.
Rešitev
for vrstica in open("temperature.txt"):
    temp_c = int(vrstica)
    temp_f = temp_c * 9 / 5 + 32
    print(temp_c, "C je", temp_f, "F")
  1. Izpiši povprečno temperaturo.
Rešitev
vsota = 0
dni = 0
for vrstica in open("temperature.txt"):
    vsota = vsota + int(vrstica)
    dni += 1
print(vsota / dni)
  1. Izpiši vse temperature višje od 17 stopinj.
Rešitev
for vrstica in open("temperature.txt"):
    temp = int(vrstica)
    if temp > 17:
        print(temp)
  1. Izpiši število dni, ko je temperatura višja od 17 stopinj.
Rešitev
toplih = 0
for vrstica in open("temperature.txt"):
    temp = int(vrstica)
    if temp > 17:
        toplih = toplih + 1
print("Toplih dni bo", toplih)
  1. Izpiši najnižjo in najvišjo napovedano temperaturo. Poskusi oboje izračunati v okviru ene same zanke.
Rešitev
najvisja = -float("inf")
najnizja = float("inf")
for vrstica in open("temperature.txt"):
    temp = int(vrstica)
    if temp > najvisja:
        najvisja = temp
    if temp < najnizja:
        najnizja = temp
print(najvisja, najnizja)
  1. Izpiši zaporedno številko dneva z najnižjo temperaturo.
Rešitev
najnizja = float("inf")
dan = 0
for vrstica in open("temperature.txt"):
    dan = dan + 1  # štejemo dneve
    temp = int(vrstica)
    if temp < najnizja:  # naleteli smo na nov rekord
        najnizja = temp  # zapomnimo si to, rekordno temperaturo
        najhladnejsi_dan = dan  # in to številko dneva
print("Najnižja temperatura bo", najnizja, "C in bo nastopila na dan", najhladnejsi_dan)

Še malo vremena

  1. Znaš izračunati poprečno temperaturo tako, kot to delajo pri smučarskih skokih, kjer ne upoštevajo tistega ocenjevalca, ki je dal najmanjšo in ocenjevalca, ki je dal največjo oceno? Če je najmanjšo (ali največjo) oceno dalo več ocenjevalcev, seveda odstranijo le enega. (Nasvet: računaj vsoto, minimum in maksimum. Po zanki odšteješ minimum in maksimum od vsote ter izračunaš povprečje.)
Rešitev
najvisja = -float("inf")
najnizja = float("inf")
vsota = 0
st_dni = 0
for vrstica in open("temperature.txt"):
    temp = int(vrstica)
    vsota += temp
    st_dni += 1
    if temp > najvisja:
        najvisja = temp
    if temp < najnizja:
        najnizja = temp

print((vsota - najvisja - najnizja) / (st_dni - 2))
  1. Nariši (no, izpiši) graf temperatur:

    24 ************************
    18 ******************
    15 ***************
    16 ****************
    18 ******************
    
Rešitev
for vrstica in open("temperature.txt"):
    temp = int(vrstica)
    print(temp, "*" * temp)

Kitajci

V datoteki yuan.txt je tečaj evra proti kitajske valute yuan (ki se menda izgovori tako, kot bi Nemci izgovorili üen) v času od 1. aprila 2005 do 9. oktobra 2023, brez sobot in nedelj.

  1. Izpiši najvišjo in najnižjo vrednost - točneje, koliko največ in koliko najmanj yuanov je bil vreden evro.
Rešitev
najnizja = float("inf")
najvisja = - float("inf")
for vrstica in open("yuan.txt"):
    vrednost = float(vrstica)
    if vrednost < najnizja:
        najnizja = vrednost
    if vrednost > najvisja:
        najvisja = vrednost

print(najnizja, najvisja)
  1. Koliko dni je bil evro vreden več ali enako 10 yuanov?
Rešitev
stevec = 0
for vrstica in open("yuan.txt"):
    vrednost = float(vrstica)
    if vrednost >= 10:
        stevec += 1

print(stevec)
  1. Kolikšen delež dni (v odstotki) je bil evro vreden več ali enako 10 yuanov?
Rešitev
stevec = 0
stevec_vsi = 0
for vrstica in open("yuan.txt"):
    vrednost = float(vrstica)
    stevec_vsi += 1
    if vrednost >= 10:
        stevec += 1

print(stevec / stevec_vsi)
  1. Na kateri dan (zaporedna številka dneva) je evro prvič padel pod osem yuanov? (Opazka: na razmerje med yuanom in evrom najbrž vpliva predvsem ravnanje kitajske in ne toliko evropske banke. Ko je vrednost yuana nizka, je to lahko dobro za kitajski izvoz, čeprav stvari seveda niso tako preproste.)
Rešitev
i = 0
for vrstica in open("yuan.txt"):
    vrednost = float(vrstica)
    i += 1
    if vrednost < 8:
        print(i)
        break
Če poznamo enumerate pa lahko rešimo takole:
for i, vrstica in enumerate(open("yuan.txt"), start=1):
    vrednost = float(vrstica)
    if vrednost < 8:
        print(i)
        break
  1. Malo težja: kako dolgo je najdaljše zaporedje dni, ko je bil evro vreden manj kot 8 yuanov?
Rešitev
najdaljse_zap = 0
trenutno_zap = 0

for vrstica in open("yuan.txt"):
    vrednost = float(vrstica)
    if vrednost < 8:
        trenutno_zap += 1
    elif trenutno_zap > najdaljse_zap:
        najdaljse_zap = trenutno_zap
        trenutno_zap = 0

if trenutno_zap > najdaljse_zap:
    najdaljse_zap = trenutno_zap

print(najdaljse_zap)
  1. Še malo težja: na kateri dan se je začelo to zaporedje?
Rešitev
najdaljse_zap = 0
trenutno_zap = 0
for i, vrstica in enumerate(open("yuan.txt"), start=1):
    vrednost = float(vrstica)
    if vrednost < 8:
        trenutno_zap += 1
    elif trenutno_zap > najdaljse_zap:
        najdaljse_zap = trenutno_zap
        najdaljse_dan = i - trenutno_zap
        trenutno_zap = 0

if trenutno_zap > najdaljse_zap:
    najdaljse_zap = trenutno_zap
    najdaljse_dan = i - trenutno_zap

print("Najdaljse zporedje se je začelo na dan", najdaljse_dan, "in je trajalo", najdaljse_zap, "dni")

Kolesa

Lastnik štirih koles različnih znamk (Cube, Canyon, Stevens, Nakamura) si v datoteko "kolesa.txt" beleži, kolikokrat se pelje s katerim.

  1. Napiši program, ki to prešteje in izpiše.
Rešitev Zaenkrat bomo nalogo rešili takole:
cube = 0
canyon = 0
stevens = 0
nakamura = 0
for vrsica in open("kolesa.txt"):
    kolo = vrsica.strip()  # odstrani \n na koncu vsake vrstice
    if kolo == "Cube":
        cube += 1
    elif kolo == "Canyon":
        canyon += 1
    elif kolo == "Stevens":
        stevens += 1
    elif kolo == "Nakamura":
        nakamura += 1

print("Cube:", cube, "Canyon:", canyon, "Stevens:", stevens, "Nakamura:", nakamura)
V prihodnjosti pa bomo poznali slovarje in bomo nalogo rešitli takole:
stevec = {}
for vrsica in open("kolesa.txt"):
    kolo = vrsica.strip()  # odstrani \n na koncu vsake vrstice
    if kolo not in stevec:
        stevec[kolo] = 0
    stevec[kolo] += 1

print(stevec)
  1. Napiši program, ki izpiše, s katerim kolesom se je peljal največkrat.
Rešitev Če želimo izpisati največkrat uporabljeno kolo, dodamo sledečo kodo rešitvi prve naloge:
if cube > canyon and cube > stevens and cube > nakamura:
    print("Cube")
elif canyon > stevens and canyon > nakamura:
    print("Canyon")
elif stevens > nakamura:
    print("Stevens")
else: 
    print("Nakamura")

Problem: iz razlogov, ki jih bomo spoznali zdaj zdaj, je na koncu vrstice, prebrane iz datoteke, še nekaj šare. Namesto niza "Cube" bo Python prebral "Cube\n". Če se želiš tega znebiti, dodaj vrstico vrstica = vrstica.strip() (ob predpostavki, da se prebrana vrstica nahaja v spremenljivki vrstica.)

Zadnja sprememba: torek, 31. oktober 2023, 19.04