def print_menu(): print '1. Print Phone Numbers' print '2. Add a Phone Number' print '3. Remove a Phone Number' print '4. Lookup a Phone Number' print '5. Quit' print numbers = {} menu_choice = 0 print_menu() while menu_choice != 5: menu_choice = input("Type in a number (1-5):") if menu_choice == 1: print "Telephone Numbers:" for x in numbers.keys(): print "Name: ",x," \tNumber: ",numbers[x] print elif menu_choice == 2: print "Add Name and Number" name = raw_input("Name:") phone = raw_input("Number:") numbers[name] = phone elif menu_choice == 3: print "Remove Name and Number" name = raw_input("Name:") if numbers.has_key(name): del numbers[name] else: print name," was not found" elif menu_choice == 4: print "Lookup Number" name = raw_input("Name:") if numbers.has_key(name): print "The number is",numbers[name] else: print name," was not found" elif menu_choice != 5: print_menu()E qui l'output:
1. Print Phone Numbers 2. Add a Phone Number 3. Remove a Phone Number 4. Lookup a Phone Number 5. Quit Type in a number (1-5):2 Add Name and Number Name:Joe Number:545-4464 Type in a number (1-5):2 Add Name and Number Name:Jill Number:979-4654 Type in a number (1-5):2 Add Name and Number Name:Fred Number:132-9874 Type in a number (1-5):1 Telephone Numbers: Name: Jill Number: 979-4654 Name: Joe Number: 545-4464 Name: Fred Number: 132-9874 Type in a number (1-5):4 Lookup Number Name:Joe The number is 545-4464 Type in a number (1-5):3 Remove Name and Number Name:Fred Type in a number (1-5):1 Telephone Numbers: Name: Jill Number: 979-4654 Name: Joe Number: 545-4464 Type in a number (1-5):5Questo programma è simile a quello con la lista di nomi nel capitolo sulle liste. Ecco come funziona il programma. Innanzitutto viene definita la funzione
print_menu
che visualizza sullo schermo un
menu più volte usato nel programma. A questo punto compare la linea
numbers = {}
che dichiara numbers come un
dizionario. Le linee seguenti fanno funzionare il menu:
for x in numbers.keys(): print "Name: ",x," \tNumber: ",numbers[x]Tramite questo ciclo si possono visualizzare le informazioni contenute nel dizionario. La funzione numbers.keys() restituisce una lista che viene poi utilizzata dal ciclo for. Questa lista non ha un ordine particolare, quindi se la volete in ordine alfabetico la dovrete ordinare. Con la notazione numbers[x] potete accedere ai singoli membri del dizionario. Ovviamente in questo caso x è una stringa. Successivamente la linea numbers[name] = phone aggiunge un nome ed un numero di telefono al dizionario. Se name è stato già inserito nel dizionario phone, rimpiazza il valore precedente. Le linee successive:
if numbers.has_key(name): del numbers[name]Controllano se una chiave è già presente nel dizionario, in tal caso la rimuovono. La funzione
numbers.has_key(name)
ritorna vero se
name è presente in numbers, altrimenti ritorna falso. La
linea del del numbers[name] rimuove la chiave name ed il
valore ad essa associato. Le linee:
if numbers.has_key(name): print "The number is",numbers[name]Controllano se nel dizionario è presente una determinata chiave, se la trovano, stampano il numero ad essa associato. Infine, se la scelta non è presente nel menu (quindi non è valida) il programma visualizza nuovamente il menu.
Ricapitolando: i dizionari hanno chiavi e valori. Le chiavi possono essere stringhe o numeri e puntano a valori. I valori puntati possono essere qualsiasi tipo di variabile, anche liste di dizionari (che possono contenere a loro volta dizionari e liste (paura eh? :=) )). Questo è un esempio che utilizza una lista in un dizionario:
max_points = [25,25,50,25,100] assignments = ['hw ch 1','hw ch 2','quiz ','hw ch 3','test'] students = {'#Max':max_points} def print_menu(): print "1. Add student" print "2. Remove student" print "3. Print grades" print "4. Record grade" print "5. Print Menu" print "6. Exit"
def print_all_grades(): print '\t', for i in range(len(assignments)): print assignments[i],'\t', print keys = students.keys() keys.sort() for x in keys: print x,'\t', grades = students[x] print_grades(grades)
def print_grades(grades): for i in range(len(grades)): print grades[i],'\t\t', print
print_menu() menu_choice = 0 while menu_choice != 6: print menu_choice = input("Menu Choice (1-6):") if menu_choice == 1: name = raw_input("Student to add:") students[name] = [0]*len(max_points) elif menu_choice == 2: name = raw_input("Student to remove:") if students.has_key(name): del students[name] else: print "Student: ",name," not found" elif menu_choice == 3: print_all_grades() elif menu_choice == 4: print "Record Grade" name = raw_input("Student:") if students.has_key(name): grades = students[name] print "Type in the number of the grade to record" print "Type a 0 (zero) to exit" for i in range(len(assignments)): print i+1,' ',assignments[i],'\t', print print_grades(grades) which = 1234 while which != -1: which = input("Change which Grade:") which = which-1 if 0 <= which < len(grades): grade = input("Grade:") grades[which] = grade elif which != -1: print "Invalid Grade Number" else: print "Student not found" elif menu_choice != 6: print_menu()E questo è il semplice output:
1. Add student 2. Remove student 3. Print grades 4. Record grade 5. Print Menu 6. Exit Menu Choice (1-6):3 hw ch 1 hw ch 2 quiz hw ch 3 test #Max 25 25 50 25 100
Menu Choice (1-6):6 1. Add student 2. Remove student 3. Print grades 4. Record grade 5. Print Menu 6. Exit Menu Choice (1-6):1 Student to add:Bill
Menu Choice (1-6):4 Record Grade Student:Bill Type in the number of the grade to record Type a 0 (zero) to exit 1 hw ch 1 2 hw ch 2 3 quiz 4 hw ch 3 5 test 0 0 0 0 0 Change which Grade:1 Grade:25 Change which Grade:2 Grade:24 Change which Grade:3 Grade:45 Change which Grade:4 Grade:23 Change which Grade:5 Grade:95 Change which Grade:0
Menu Choice (1-6):3 hw ch 1 hw ch 2 quiz hw ch 3 test #Max 25 25 50 25 100 Bill 25 24 45 23 95 Menu Choice (1-6):6La variabile students è un dizionario le cui chiavi sono i nomi degli studenti, i valori sono i voti degli studenti. Le prime due linee creano semplicemente due liste. La linea successiva
students = {'#Max':max_points}
crea un nuovo dizionario la cui
chiave è #Max
e il valore [25,25,50,25,100] (è il
valore di max_points
nel momento in cui il valore viene
assegnato; viene usata la chiave #Max
perché #
è sempre
ordinato sopra i caratteri alfabetici). Quindi viene definita la
funzione print_menu
. Le linee seguenti definiscono
print_all_grades
.
def print_all_grades(): print '\t', for i in range(len(assignments)): print assignments[i],'\t', print keys = students.keys() keys.sort() for x in keys: print x,'\t', grades = students[x] print_grades(grades)Notate come le chiavi vengano innanzitutto estratte dal dizionario students con la funzione di keys contenuta nella linea: keys = students.keys(). keys è una lista, quindi possono essere usate tutte le funzioni delle liste. Successivamente vengono ordinate le chiavi nella linea keys.sort() e viene utilizzato un ciclo for per scorrere tutte le chiavi. I voti sono immagazzinati come una lista all'interno del dizionario, in modo che l'assegnamento grades = students[x] assegni a grades la lista immagazzinata nella chiave x. La funzione
print_grades
visualizza semplicemente una lista ed è definita
poche linee sotto.
Le ultime linee del programma implementano le varie opzioni del
menu. La linea students[name] = [0]*len(max_points)
aggiunge
uno studente alla chiave corrispondente al nome. La notazione
[0]*len(max_points)
crea una array di zeri della stessa
lunghezza della lista max_points
.
La scelta remove students cancella uno studente in modo simile all'esempio precedente. La scelta record grades è più complessa. I voti vengono estratti nella linea grades = students[name] che ritorna un riferimento ai voti dello studente name. Un voto viene quindi registrato nella linea grades[which] = grade. Notate che grades non viene inserito nel dizionario students. Il motivo di questa "mancanza" è che grades è semplicemente un altro nome per students[name] quindi cambiare grades significa cambiare student[name].
I dizionari rappresentano un modo semplice per collegare chiavi a valori. Possono essere usati facilmente per tenere traccia dei dati che sono attribuiti alle varie chiavi.