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

Rispondere a