Salve a tutti. Sono agli inizi con Python, sto imparando grazie a varie guide trovate online, e sto iniziando ad addentrarmi nell'ottimizzazione del codice. Ora, ho scritto questo piccolo programmino (con GUI in pyGTK) che accetta dei numeri come input, ne calcola la media, e restituisce la media, il numero maggiore immesso, il numero minore, il numero più vicino alla media. Ora, vorrei dei consigli su come ottimizzare il codice, magari sostituendo qualche ciclo if con qualcosa di più performante o simili =D posto il codice: (non insultatemi perchè non c'è nemmeno un commento o una doc string xD)
import pygtk pygtk.require('2.0') import gtk def Media(numeri): divisore = len(numeri) a = 0 for num in numeri: a = a + float(num) try: media = float(a) / float(divisore) return media except: return None def DistanzaDallaMedia(numero, media): numero = float(numero) distanzamedia = abs(numero - media) return distanzamedia class Finestra: def __init__(self): self.win = gtk.Window(gtk.WINDOW_TOPLEVEL) self.win.set_title("Calcolo media aritmetica") self.win.connect("destroy", self.esci) self.win.connect("delete_event", self.delete_event) self.win.set_default_size(400,300) self.vbox = gtk.VBox(0,0) self.label = gtk.Label("Inserisci qui sotto i numeri dei quali vuoi fare la media, separati da spazi.") self.entry = gtk.Entry(100) self.button = gtk.Button("Esegui", gtk.STOCK_EXECUTE) self.button.connect("clicked", self.CalcolaMedia) self.risultato = gtk.Label("Clicca su esegui, qui comparira' il risultato") self.statistiche = gtk.Label("Clicca su esegui, qui compariranno alcune statistiche") self.vbox.pack_start(self.label) self.vbox.pack_start(self.entry) self.vbox.pack_start(self.button) self.vbox.pack_start(self.risultato) self.vbox.pack_end(self.statistiche) self.win.add(self.vbox) self.win.show_all() def GetUserInput(self, widget): UserInput = widget.get_text() return UserInput def OttieniNumeri(self): UserInput = self.GetUserInput(self.entry) import string Numeri = string.split(UserInput) Numeri = map(int, Numeri) return Numeri def CalcolaMedia(self, widget): Numeri = self.OttieniNumeri() MediaCalcolata = Media(Numeri) if MediaCalcolata: self.risultato.set_text("La media calcolata equivale a " + str(MediaCalcolata)) Statistiche = {} for num in Numeri: if 'maggiore' not in Statistiche.keys(): Statistiche['maggiore'] = num Statistiche['minore'] = num Statistiche['vicino_media'] = num else: if DistanzaDallaMedia(num, MediaCalcolata) < DistanzaDallaMedia(Statistiche['vicino_media'], MediaCalcolata): Statistiche['vicino_media'] = num if num > Statistiche['maggiore']: Statistiche['maggiore'] = num elif num < Statistiche['minore']: Statistiche['minore'] = num self.StampaStatistiche(Statistiche) else: self.risultato.set_text("Devi inserire almeno un numero!") def StampaStatistiche(self, Statistiche): self.statistiche.set_text("Il numero maggiore inseirto e' " + str(Statistiche['maggiore']) + "\nIl numero minore inserito e' " + str(Statistiche['minore']) + "\nIl numero inserito piu' vicino alla media e': " + str(Statistiche['vicino_media'])) def delete_event(self, widget, event, data=None): return False def esci(self, widget, data=None): gtk.main_quit() def main(self): gtk.main() if __name__ == "__main__": PrimaFinestra = Finestra() PrimaFinestra.main() _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python