# Domača naloga: Analiza dražbe

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

## Rešitev - s seznamom za tekoči predmet

    trenutni_predmet = ""
    cene = []

    for vrstica in open("zapisnik.txt"):
        predmet, _, cena = vrstica.split(",")
        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])
            trenutni_predmet = predmet
            cene = []
        cene.append(int(cena))

    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"):
        predmet, _, cena = vrstica.split(",")
        if predmet != trenutni_predmet:
            if trenutni_predmet:
                print(trenutni_predmet, "-", cene[-1] - cene[-7:][0])
            trenutni_predmet = predmet
            cene = []
        cene.append(int(cena))

    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"):
        predmet, _, cena = vrstica.split(",")
        if predmet != trenutni_predmet:
            if trenutni_predmet:
                print(trenutni_predmet, "-", cene[-1] - cene[0])
            trenutni_predmet = predmet
            cene = []
        cene = (cene + [int(cena)])[-7:]

    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

## Rešitev s slovarjem

Č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.

    ponudbe = {}  # slovar: ključi so predmeti, vrednosti *seznami* ponudb za ta predmet

    for vrstica in open("zapisnik.txt"):
        predmet, _, cena = vrstica.split(",")
        if predmet not in ponudbe:
            ponudbe[predmet] = []
        ponudbe[predmet].append(int(cena))

    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.