Nekateri [who? citation needed?] pravijo, da se na dražbi za vsak izdelek v začetku samo ogrevajo in da je zaželenost izdelka najbolj primerno presojati po tem, za koliko se je dvignila njegova cena v zadnjih sedmih ponudbah.
Napiši program, ki za vsak izdelek pove, koliko se je dvignila njegova cena v zadnjih sedmih ponudbah. Če je bilo vseh ponudb manj kot 7, pa pač v toliko ponudbah, kot jih je bilo.
Pravilni rezultat je
slika - 14
pozlačen dežnik - 0
Meldrumove vaze - 18
skodelice - 18
kip - 13
čajnik - 0
srebrn jedilni servis - 14
perzijska preproga - 5
= ""
trenutni_predmet = []
cene
for vrstica in open("zapisnik.txt"):
= vrstica.split(",")
predmet, _, cena if predmet != trenutni_predmet:
if trenutni_predmet:
if len(cene) >= 7: # Tole se da preprosteje - glej spodaj
print(trenutni_predmet, "-", cene[-1] - cene[-7])
else:
print(trenutni_predmet, "-", cene[-1] - cene[0])
= predmet
trenutni_predmet = []
cene int(cena))
cene.append(
print(trenutni_predmet, "-", cene[-1] - cene[0])
slika - 14
pozlačen dežnik - 0
Meldrumove vaze - 18
skodelice - 18
kip - 13
čajnik - 0
srebrn jedilni servis - 14
perzijska preproga - 5
Spremenljivka trenutni_predmet
vsebuje predmet, s
katerim se trenutno ukvarjamo (dokler ne preberemo prvega predmeta, bo
to prazen niz), cene
pa vse cene, ponujene zanj.
Po branju vsake vrstice, preverimo, ali gre za isti predmet kot v
prejšnji vrstici. Če ne, potem preverimo, ali je niz
trenutni_predmet
neprazen: če bi bil, to pomeni, da smo
zgolj prebrali prvo vrstico. Če ni prazen, moramo izpisati ime predmeta
in povedati, za koliko se je dvignila njegova cena v zadnjih sedmih
ponudbah. To načelno dobimo z cene[-1] - cene[-7]
, vendar
za nekatere predmete ni bilo sedmih ponudb. Za takšne računamo razliko
med zadnjo in prvo ponudbo.
V primeru, da gre za nov predmet, si zapomnimo novi trenutni izdelek in izpraznimo seznam cen.
V vsakem primeru pa dodamo ceno tega izdelka v seznam.
Zoprni ponovljeni print
po zanki poskrbi za zadnji
predmet, perzijsko preprogo.
Računanje razlike si lahko malo poenostavimo z rezinami.
cene[-7:]
vrne zadnjih sedem cen, če ima seznam manj kot
sedem elementov, pa pač toliko, kolikor jih je.
cene[-7:][0]
je potem prva izmed zadnjih sedmih (ali
kolikor jih pač je) cen.
= ""
trenutni_predmet = []
cene
for vrstica in open("zapisnik.txt"):
= vrstica.split(",")
predmet, _, cena if predmet != trenutni_predmet:
if trenutni_predmet:
print(trenutni_predmet, "-", cene[-1] - cene[-7:][0])
= predmet
trenutni_predmet = []
cene int(cena))
cene.append(
print(trenutni_predmet, "-", cene[-1] - cene[-7:][0])
slika - 14
pozlačen dežnik - 0
Meldrumove vaze - 18
skodelice - 18
kip - 13
čajnik - 0
srebrn jedilni servis - 14
perzijska preproga - 5
Zanimiva je tudi rešitev, po kateri v vsakem trenutku hranimo le zadnjih sedem cen.
= ""
trenutni_predmet = []
cene
for vrstica in open("zapisnik.txt"):
= vrstica.split(",")
predmet, _, cena if predmet != trenutni_predmet:
if trenutni_predmet:
print(trenutni_predmet, "-", cene[-1] - cene[0])
= predmet
trenutni_predmet = []
cene = (cene + [int(cena)])[-7:]
cene
print(trenutni_predmet, "-", cene[-1] - cene[0])
slika - 14
pozlačen dežnik - 0
Meldrumove vaze - 18
skodelice - 18
kip - 13
čajnik - 0
srebrn jedilni servis - 14
perzijska preproga - 5
Če nam gre na živce, da moramo stalno beležiti zadnji predmet in ga primerjati s trenutnim, si lahko pomagamo tako, da vse podatke najprej preberemo v slovar. Ključi bodo predmeti, vrednosti pa seznami cen za ta predmet.
= {} # slovar: ključi so predmeti, vrednosti *seznami* ponudb za ta predmet
ponudbe
for vrstica in open("zapisnik.txt"):
= vrstica.split(",")
predmet, _, cena if predmet not in ponudbe:
= []
ponudbe[predmet] int(cena))
ponudbe[predmet].append(
for predmet, cene in ponudbe.items():
print(predmet, "-", cene[-1] - cene[-7:][0])
slika - 14
pozlačen dežnik - 0
Meldrumove vaze - 18
skodelice - 18
kip - 13
čajnik - 0
srebrn jedilni servis - 14
perzijska preproga - 5
Resda imamo dve zanki, vendar sta preprostejši. Pa še
print
po zanki nam ne dela več sramote.