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
[email protected]
http://lists.python.it/mailman/listinfo/python