Esercizio python

di il
8 risposte

Esercizio python

Salve ho un problema con un esercizio da svolgere in python.
Ho un file txt contenente codice identificativo prodotto, nome prodotto, venditore, disponibilità del prodotto( si o no) e il prezzo.
Mi richiede a) una funzione per il caricamento da file in una lista delle informazioni contenute nel file di testo
b) ricercare il prezzo minimo di un prodotto dato in input dall utente e che la disponibilità sia uguale a si
c) una funzione per calcolare la media dei prezzi per uno specifico venditore il cui nome è dato in input dall utente
d) una funzione che visualizza a video l elenco dei prodotti venduti da un singolo produttore dato dall utente in input.
Riscontro vari problemi nel mio codice
Nel caso b) non printa il prezzo piu basso c) non printa la media ma il primo prezzo di quel venditore.



def prezzoMinore(prodotti):
    x=99999999
    y=[]
    for i in inventario:
        if (i[1]==prodotto and i[3]=="si"):
            t=float(i[4])
            if float(i[4])<x:
                x=float(i[4])
                y=i
    print(y)

def mediaPerVenditore(venditore):
    t=0
    n=0
    for i in inventario:
        if(i[2]==venditore):
            n=n+1
            t=t+float(i[4])
    return(t/n)

def prodottiVenditore(venditore):# d
    for i in inventario:
        if (i[2]== venditore):
            print(i)
            
            
 with open("prodotti.txt") as x:
        inventario=[i.strip().split(' ') for i in x]
        print(inventario)
        prodotto=input("digitare il nome del prodotto da cercare")
        print(prezzoMinore(prodotto))
        venditore=input("media per quale venditore?")
        print(mediaPerVenditore(venditore))
        venditore=input("digita venditore")
        prodottiVenditore(venditore)
        

  
Spero sappiate aiutarmi allego anche file di testo
Allegati:
27792_6d847160fdbad14f4bb320756c78f31f.png
27792_6d847160fdbad14f4bb320756c78f31f.png

8 Risposte

  • Re: Esercizio python

    In Python, l'identazione del codice FA PARTE DEL LINGUAGGIO, al contrario di linguaggi basati sulle parentesi graffe "{}".

    Quindi, E' FONDAMENTALE/ASSOLUTAMENTE OBBLIGATORIO che il codice che presenti sia CORRETTAMENTE IDENTATO, altrimenti NON E' POSSIBILE capire se fa quello che dovrebbe fare!

    (per quanto possiamo essere competenti, NON leggiamo nella mente NE abbiamo la visione a distanza )

    Per evitare identazioni ""strane"", usa SOLO SPAZI / ASSOLUTAMENTE NON il carattere TABULAZIONE!!!!!
  • Re: Esercizio python

    L identazione sul pc è perfetta tant è che il programma parte , purtroppo l ho scritto dal cell. Ma provvedo a caricarlo in modo corretto , per poter capire qual é l errore
  • Re: Esercizio python

    migliorabile ha scritto:


    In Python, l'identazione del codice FA PARTE DEL LINGUAGGIO, al contrario di linguaggi basati sulle parentesi graffe "{}".

    Quindi, E' FONDAMENTALE/ASSOLUTAMENTE OBBLIGATORIO che il codice che presenti sia CORRETTAMENTE IDENTATO, altrimenti NON E' POSSIBILE capire se fa quello che dovrebbe fare!

    (per quanto possiamo essere competenti, NON leggiamo nella mente NE abbiamo la visione a distanza )

    Per evitare identazioni ""strane"", usa SOLO SPAZI / ASSOLUTAMENTE NON il carattere TABULAZIONE!!!!!
    ho appena inserito il codice funzionante da idle python se potresti dargli un occhiata, grazie mille
  • Re: Esercizio python

    Aggiungi anche i DATI.

    L'immagine non ci serve ad una ""cippa""
    Li dovremmo riscrivere A MANO o installare un OCR!
  • Re: Esercizio python

    migliorabile ha scritto:


    Aggiungi anche i DATI.
    L'immagine non ci serve una ""cippa""
    Li dovremmo riscrivere A MANO o installare un OCR!
    150 tv-samsung-mu VerdiSRL si 1000
    200 notebook-dell-xds GialliSPA si 1400
    10 tv-samsung-mu GialliSPA si 990
    19 tv-lg-yy RossiSNC si 550
    333 soundbar-yamaha-yps VerdiSRL no 870
    334 soundbar-yamaha-yps GialliSPA si 880
    335 soundbar-yamaha-yps RossiSNC si 875
  • Re: Esercizio python

    Note:
    1) ci sono degli standard abbastanza consolidati sui nomi delle variabili.
    In particolare, i,j,k in generale, sono degli INDICI numerici con valori interi! E vengono usarti per accedere ad un VETTORE
    Tu li usi per estrarre un RECORD (nel tuo caso una sotto-lista) da una LISTA.
    Invece di "i" cambia il nome in "rec" (da rec)ord)

    2) NON E' MAI BENE usare delle variabili globali, MA se globali sono, che GLOBALI SIANO!!!
    Quindi:
    2.1) "inventario" lo definisci a livello GLOBALE, quindi PRIMA DI TUTTE le defiinzioni di funzioni (studia come funziona la keyword "global" di Python), OPPURE
    2.2) passi "inventario" a TUTTE LE FUNZIONI.

    L'uso che fai al momento di "invenatario" e' al limite dell"ORRENDO ORRORE: NON E' una variable globale, perche' viene definita DENTRO un "with", NON E' una variabile locale perche' la usi dentro altre funzioni, SENZA passarla come argomento. NO BENE!

    3) le variabili "x" e "y", in generale, sono le COORDINATE (un float) DI UN PUNTO nel piano cartesiano. Nel tuo caso sono, rispettivamente, il "prezzo_minimo" e"rec_prezzo_minimo".
    Dai SEMPRE nomi RAGIONEVOLI alle funzioni ed alle variabili. Ricorda che TU sai l'uso che hai fatto delle variabili, ma NOI dobbiamo DEDURLO dall'analisi del codice. E se le variabili hanno un nome del picchio, ci TOCCA STUDIARE TUTTO il codice per capire che cosa vogliano dire!

    4) "t" (t)emp) puo' anche andare bene. "n" e' il classico nome della variabile di tipo interso che tiene il "n)umero" di elementi
  • Re: Esercizio python

    Nella funzione "prezzoMinore" usi il parametro "prodotti" ma poi nel corpo della funzione usi la variabile "prodotto". Se correggi questo errore il programma funzionicchia quanto basta.
  • Re: Esercizio python

    Poi, se i conti sono giusti non lo so, devi crearti delle unit test con dei risultati noti in modo da confrontare i valori ritornati dalle funzioni.
    print(prezzoMinore(prodotto))
    non ha senso, la funzione prezzoMinore non ritorna niente (a meno che tu non modifichi l'ultima riga di prezzoMinore in "return y").
    Dopo aver leggermente sistemato il codice di prezzoMinore, mi sembra che funzioni:
    def prezzoMinore(prodotto):
        x=99999999.0
        y=[]
    
        for i in inventario:
            if (i[1]==prodotto and i[3]=="si"):
                t=float(i[4])
                if t<x:
                    x=t
                    y=i
    
        return y
Devi accedere o registrarti per scrivere nel forum
8 risposte