Forum >> Principianti >> Funzione con ciclo for e condizioni.

Pagina: 1

Ciao a tutti.




Devo creare una funzione che mi restituisca il valore massimo e il valore minimo di un esame, contenuto in una lista di tuple:

es_svolti=[(cod_utente,cod_es,data_es,val_es)]




es_svolti = [(23, '90.44.1', '12/12/2018', 20), (23, '90.33.5', '12/12/2018', 12), (13, '90.09.1', '12/12/2018', 52),

(31, '90.09.1', '21/12/2018', 120), (34, '90.09.1', '21/12/2018', 2), (55, '90.44.1', '21/12/2018', 48),

(13, '90.33.5', '21/12/2018', 70), (23, '90.09.1', '12/01/2019', 20), (12, '90.09.1', '10/01/2019', 80),

(12, '90.33.5', '12/01/2019', 120), (55, '90.44.1', '12/01/2019', 38), (12, '90.09.1', '12/01/2019', 120)]




La funzione è la seguente:

def valori_min_max(es_svolti,cod_es):

for i in es_svolti:

if cod_es not in i:

return None

else:

if i1==cod_es:

valori=[]

valori.append(i3)

return min(valori),max(valori)







Ecco cosa la funzione dovrebbe restituire:

valori_min_max(es_svolti, '90.44.1') # risultato: (20, 48)


valori_min_max(es_svolti, '90.44.5') # risultato: None

valori_min_max(es_svolti, '90.09.1') # risultato: (2, 120)





Ecco invece cosa mi restituisce:


""" #risultato: (20, 20)

""" #risultato: None

""" #risultato: None





Quindi prende in considerazione soltanto la prima tupla.

Facendo delle prove nella shell invece mi accorgo che stampando i mi restituisce l'ultima tupla.




Non capisco dove sta l'errore. Qualcuno potrebbe aiutarmi? Grazie.
io l'ho fatto così, può andare?




es_svolti = [(23, '90.44.1', '12/12/2018', 20), (23, '90.33.5', '12/12/2018', 12), (13, '90.09.1', '12/12/2018', 52),(31, '90.09.1', '21/12/2018', 120), (34, '90.09.1', '21/12/2018', 2), (55, '90.44.1', '21/12/2018', 4 8), (13, '90.33.5', '21/12/2018', 70), (23, '90.09.1', '12/01/2019', 20), (12, '90.09.1', '10/01/2019', 80),(12, '90.33.5', '12/01/2019', 120), (55, '90.44.1', '12/01/2019', 3 8), (12, '90.09.1', '12/01/2019', 120)]

maxvalue = 0
minvalue = 120

for i in range(0,len(es_svolti)):
    temp = es_svolti
    if temp[ 3 ] >= maxvalue:
        maxvalue = temp[ 3 ]

for i in range(0,len(es_svolti)):
    temp = es_svolti
    if temp[ 3 ] <= minvalue:
        minvalue = temp[ 3 ]

print("voto massimo: " + str(maxvalue))
print("voto minimo: " + str(minvalue))

for i in range(0,len(es_svolti)):
    temp = es_svolti
    if temp[ 3 ] == maxvalue:
        print("voto massimo: " + str(es_svolti))

for i in range(0,len(es_svolti)):
    temp = es_svolti
    if temp[ 3 ] == minvalue:
        print("voto minimo: " + str(es_svolti))





l'ho strutturato in questa maniera:

assegno due variabili temporanee di voto minimo e massimo

nel primo ciclo for prendo in rassegna tutti i voti e memorizzo il valore massimo

nel secondo ciclo for prendo in rassegna tutti i voti e memorizzo il valore minimo

nel terzo ciclo for prendo il valore massimo e se corrisponde col voto nella tupla ne stampo le informazioni

nel quarto ciclo for prendo il valore minimo e se corrisponde col voto nella tupla ne stampo le informazioni




questo è l'output:





voto massimo: 120

voto minimo: 2

voto massimo: (31, '90.09.1', '21/12/2018', 120)

voto massimo: (12, '90.33.5', '12/01/2019', 120)

voto massimo: (12, '90.09.1', '12/01/2019', 120)

voto minimo: (34, '90.09.1', '21/12/2018', 2)



--- Ultima modifica di stix77 in data 2019-01-30 14:03:11 ---
Ciao, ti ringrazio per la pronta risposta!
Purtroppo il codice che mi hai inviato restituisce un errore(TypeError: '>=' not supported between instances of 'tuple' and 'int')




Inoltre preferirei non creare un codice molto diverso dal mio, ma capire dove sta l'errore che ho commesso. :dont-know:
L'ho corretta in questo modo.

Ma non riesco a far restituire "None" quando il cod_es non è presente nell'elenco.




def valori_min_max(es_svolti,cod_es):

valori=[]

for i in es_svolti:

if i1==cod_es:

valori.append(i3)

else:

continue



return min(valori),max(valori)
Ciao, ti ringrazio per la pronta risposta!
Purtroppo il codice che mi hai inviato restituisce un errore(TypeError: '>=' not supported between instances of 'tuple' and 'int')




Inoltre preferirei non creare un codice molto diverso dal mio, ma capire dove sta l'errore che ho commesso. :dont-know:

ciao, l'errore lo da perchè nel codice non so come mai sono saltate le parentesi quadre con l'indice del ciclo for




cioè ogni volta che vedi temp = es_svolti poi ci andrebbe attaccato l'indice cioè [ i ]





Pagina: 1



Esegui il login per scrivere una risposta.