10/05/11 12:08
Edex
Salve a tutti.
Sono un neo utente e anche un neo programmatore. Da più di qualche mese ormai sto inoltrandomi nell'apprandere il python. Ho scritto un programmino: una semplice rubrica con funzioni di memorizzazione, modifica e visualizzazione dei numeri, implementando anche la possibilità di aggiungere un email al contatto.
Ora che l'ho scritto però voglio utilizzarlo per migliorare ancora: il mio sorgente magari non contiene bug (anche se non ne sono certo) però probabilmente è scritto in modo macchinoso e artificioso. Io non sono in grado di correggerlo per renderlo più snello è veloce per il semplice motivo che non riesco a capire come poterlo snellire. Speravo che qualcuno di voi potesse dirmi non tanto come migliorare questo mio programmino di esercizio, bensì speravo che mi poteste dare dei pareri su quanto sia "buono" o meno il codice che ho scritto e come posso migliorare il mio stile. Grazie, spero di essere stato chiaro.
Ecco il sorgente:
P.S. so che è una grande rischiesta ma spero che qualcuno di voi abbia la volontà e il tempo di aiutarmi
Sono un neo utente e anche un neo programmatore. Da più di qualche mese ormai sto inoltrandomi nell'apprandere il python. Ho scritto un programmino: una semplice rubrica con funzioni di memorizzazione, modifica e visualizzazione dei numeri, implementando anche la possibilità di aggiungere un email al contatto.
Ora che l'ho scritto però voglio utilizzarlo per migliorare ancora: il mio sorgente magari non contiene bug (anche se non ne sono certo) però probabilmente è scritto in modo macchinoso e artificioso. Io non sono in grado di correggerlo per renderlo più snello è veloce per il semplice motivo che non riesco a capire come poterlo snellire. Speravo che qualcuno di voi potesse dirmi non tanto come migliorare questo mio programmino di esercizio, bensì speravo che mi poteste dare dei pareri su quanto sia "buono" o meno il codice che ho scritto e come posso migliorare il mio stile. Grazie, spero di essere stato chiaro.
Ecco il sorgente:
class Rubrica: def __init__(self, nome, numero, email): self.nome = nome self.numero = numero self.email = email def __str__(self): return "%-20s %-15s %s" %(self.nome, self.numero, self.email) def str_numero(self): return "%-20s %s" %(self.nome, self.numero) def str_email(self): return "%-20s %s" %(self.nome, self.numero) class Tipo_Dato: def Quale_str(self): Quale_s() scelta = raw_input("") while 1: if scelta == "1": Met_O_num.Stampa() return elif scelta == "2": Met_O_em.Stampa() return elif scelta == "": return else: print "Scelta non valida" print "Per uscire dalla funzione premere invio" def Quale_mod(self): Quale_s() scelta = raw_input("") while 1: if scelta == "1": Met_O_num.Mod() return elif scelta == "2": Met_O_em.Mod() return elif scelta == "": return else: print "Scelta non valida" print "Per uscire dalla funzione premere invio" class Operazioni_Numeri: def Mod(self): nom = raw_input("") for x in Contatti: if nom == x.nome: numero = raw_input("") x.numero = numero return else: print "Nessuna corrispondenza in rubrica" return def Cancella(self): nom = raw_input("") if nom == "": return for x in Contatti: if nom == x.nome: i = Contatti.index(x) del Contatti[i] else: print "Nessun nome corrispondete in rubrica" print "Per uscire dalla funzione premere invio" Met_O.Cancella() def Cancella_tutto(self): scelta = raw_input("Stai per cancellare l'intera rubrica sei sicuro?(s/N)") if scelta == "s": global Contatti Contatti = [] elif scelta == "N": return else: print "Scelta non valida" Met_O.Cancella_tutto() def Stampa(self): nom = raw_input("") print "%-20s %s" %("Nome", "Numero") print for x in Contatti: if nom == x.nome: print x.str_numero() print return else: print "Nessuna corrispondenza in rubrica" return class Operazioni_email: def Mod(self): nom = raw_input("") for x in Contatti: if nom == x.nome: email = raw_input("") x.email = email return else: print "Nessuna corrispondenza in rubrica" return def Stampa(self): nom = raw_input("") print "%-20s %s" ("Nome", "Email") print for x in Contatti: if nom == x.nome: print x.str_email() print return else: print "Nessuna corrispondenza in rubrica" return class Users: def Recupero_dati(self): import pickle file_name = "C:\Users\Franco\Desktop\Rubrica_" + user + ".pck" file = open(file_name,"r") while 1: try: global Contatti x = pickle.load(file) Contatti.append(x) except: return def Recupero_user(self): import string global list_users f = open("C:\Users\Franco\Desktop\list_users.txt","r") list_users = string.split(f.read()) def Controllo_user(self): global user user = raw_input("Inserisci Username, per aggiungerne uno scrivere x e poi invio") if user == "x": Crea_file() global list_users list_users.append(new_user) elif user in list_users: Met_U.Recupero_dati() else: print "Nessuno user corrispondente" Met_U.Controllo_user() class Salva: def Salva_numeri(self): import pickle if user != "x": file_name = "C:\Users\Franco\Desktop\Rubrica_" + user + ".pck" elif user == "x": file_name = "C:\Users\Franco\Desktop\Rubrica_" + new_user + ".pck" file = open(file_name, "w") for x in Contatti: pickle.dump(x, file) return def Salva_user(self): f = open("C:\Users\Franco\Desktop\list_users.txt","w") for x in list_users: f.write("%s " %(x)) return def Vuoi_salvare(self): scelta = raw_input("Vuoi salvare?(s/N)") if scelta == "s": Met_S.Salva_user() Met_S.Salva_numeri() elif scelta == "N": return else: print "Scelta non valida" Met_S.Vuoi_salvare() #Funzioni di utilizzo generale def Menu(): print "Cosa vuoi fare?" print "1-Aggiungi un contatto" print "2-Modifica un contatto" print "3-Visualizza un contatto" print "4-Visualizza tutti i contatti" print "5-Eliminare un contatto" print "6-Eliminare tutti i contatti" print "7-Esci" def Crea_file(): global new_user new_user = raw_input("Insersci il nuovo Username") file_name = "C:\Users\Franco\Desktop\Rubrica_" + new_user + ".pck" file = open(file_name, "w") file.close() def Aggiungi(): nome = raw_input("") numero = raw_input("") email = raw_input("") contatto = Rubrica(nome, numero, email) Contatti.append(contatto) def Stampa_Tutto(): lista_nomi = [] for x in Contatti: lista_nomi.append(x.nome) lista_nomi.sort() Categorie() for x in lista_nomi: for y in Contatti: if x == y.nome: print Contatti[Contatti.index(y)] print return def Stampa(): nom = raw_input("") Categorie() for x in Contatti: if nom == x.nome: print x print return else: print "Nessuna corrispondenza in rubrica" return def Categorie(): print print "%-20s %-15s %s" %("Nome","Numero","Email") print def Quale_s(): print "Su che tipo di dato vuoi operare?" print "1-Un numero" print "2-Una email" Contatti = [] Met_Tipo = Tipo_Dato() Met_O_em = Operazioni_email() Met_O_num = Operazioni_Numeri() Met_U = Users() Met_S = Salva() Met_U.Recupero_user() Met_U.Controllo_user() while 1: Menu() scelta = raw_input("Inserire la scelta") if scelta == "1": Aggiungi() elif scelta == "2": Met_Tipo.Quale_mod() elif scelta == "3": Met_Tipo.Quale_str() elif scelta == "4": Stampa_Tutto() elif scelta == "5": Met_O_num.Cancella() elif scelta == "6": Met_O_num.Cancella_tutto() elif scelta == "7": Met_S.Vuoi_salvare() break else: print "Scelta non valida" scelta = raw_input("Inserire la scelta")
P.S. so che è una grande rischiesta ma spero che qualcuno di voi abbia la volontà e il tempo di aiutarmi
Ultima modifica effettuata da Edex 10/05/11 12:10
aaa