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-46^H54 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-454 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-454 Name: Joe Number: 545-4464 Type in a number (1-5):5
print_menu
is defined. print_menu
just prints a menu that is later used twice in the program. Next comes the funny looking line numbers = {}
. All that line does is tell Python that numbers is a dictionary. The next few lines just make the menu work. The lines:
for x in numbers.keys(): print "Name: ",x," \tNumber: ",numbers[x]
if numbers.has_key(name): del numbers[name]
numbers.has_key(name)
returns true if name is in numbers but other wise returns false. The line del numbers[name] removes the key name and the value associated with that key. The lines:
if numbers.has_key(name): print "The number is",numbers[name]
A recap: Dictionaries have keys and values. Keys can be strings or numbers. Keys point to values. Values can be any type of variable (including lists or even dictionaries (those dictionaries or lists of course can contain dictionaries or lists themselves (scary right? :) )). Here is an example of using a list in a dictionary:
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}
creates a new dictionary with the key #Max
and the value is set to be [25,25,50,25,100] (since thats what max_points
was when the assignment is made) (I use the key #Max
since it is sorted ahead of any alphabetic characters). Next print_menu
is defined. Next the print_all_grades
function is defined in the lines:
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
just prints a list and is defined a few lines later.
The later lines of the program implement the various options of the menu. The line students[name] = [0]*len(max_points)
adds a student to the key of their name. The notation [0]*len(max_points)
just creates a array of 0's that is the same length as the max_points
list.
The remove student entry just deletes a student similar to the telephone book example. The record grades choice is a little more complex. The grades are retrieved in the line grades = students[name] gets a reference to the grades of the student name. A grade is then recorded in the line grades[which] = grade. You may notice that grades is never put back into the students dictionary (as in no students[name] = grades). The reason for the missing statement is that grades is actually another name for students[name] and so changing grades changes student[name].
Dictionaries provide a easy way to link keys to values. This can be used to easily keep track of data that is attached to various keys.