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()
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):5
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]
if numbers.has_key(name): del numbers[name]
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]
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()
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):6
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)
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.