# Decido di implementare un'unica funzione # sia per calcolare sia la media dei valori # di lista di stringhe convertibili in numero # che la lunghezza della lista. # Il return di questa funzione è una tupla di due # elementi def computeAverageAndLen(values): average = 0 #dichiaro una variabile che userò per calcolare la media for v in values: # v prenderà di volta in volta un elemento di values v=float(v) # Converto il valore di v in un float. average+=v average=average/len(values) # calcolo la media return (average,len(values)) #Il dato restituito è una tupla di due elementi # Decido di implementare la composizione # della riga da scrivere in una funzione. # La funzione restituisce una stringa. def composeLine(text,average,nmberOfVotes): average=round(average,2) #arrotondo average alla seconda cifra decimale textLine = text+","+str(average)+","+str(nmberOfVotes)+"\n" #compongo la stringa return textLine # Questa è la prima operazione che fa il programma. # Apro il file e inserisco in content il contenuto del # file, sfruttando la conversione di tipo # Il file "input.txt" contiene dati nel formato # del file a disposizone dal centro studi. with open("input.txt","r") as inputFile: content=list(inputFile) # Ora inizio a lavorare sul file in uscita. # Decido che come prima cosa voglio scrivere # la riga con l'intestazione head = "Localita',Media Voti,Numero Voti\n" with open("output.txt","w") as outputFile: outputFile.write(head) # Ora mi occupo di creare e scrivere nel file # tutte righe nel formato del file desiderato. # uso la modalità append per aggiungere le righe # ad un file esistente. with open("output.txt","a") as outputFile: for line in content: # line conterrà di volta in volta una riga del file di partenza elements = line.split(",") #Splitto la linea dove trovo le virgole. name = elements[0] # il nome è il primo elemento. elements[-1]=elements[-1].split("\n")[0] #Rimuovo il carattere "\n" dall'ultimo elemento. (average, nVotes) = computeAverageAndLen(elements[1:]) #passo alla funzione l'elenco dei valori tranne il primo # NOTA: dato che computeAverageAndLen restituisce # una tupla di due valori devo assegnare il # risultato a due variabili. # Nel mio caso metto il primo risultato su average # e il secondo su nVotes lineToWrite = composeLine(name,average,nVotes) #Ora creaola stringa da scrivere outputFile.write(lineToWrite) # Infine la scrivo nel file.