下一个代码被修改为包含一个新的菜单项“(r)”,以重新排列保存在csv文件中的电话列表中的姓名/号码。步骤包括:
reorder_phones()
。在用于运行此代码的文件与下面的类似。在
Before: Choice: s Name Phone Number 1 Jerry Lopez (212) 842-2527 2 George Sierr (212) 452-8145 3 Elaine Benea (212) 452-8723 After: Choice: s Name Phone Number 1 Elaine Benea (212) 452-8723 2 George Sierr (212) 452-8145 3 Jerry Lopez (212) 842-2527
主要的问题是,我不知道如何保存和使用已排序的列表;如果有人能指导我,我将不胜感激。在
import os
import csv
phones = []
name_pos = 0
phone_pos = 1
phone_header = [ 'Name', 'Phone Number']
def proper_menu_choice(which):
if not which.isdigit():
print ("'" + which + "' needs to be the number of a phone!")
return False
which = int(which)
if which < 1 or which > len(phones):
print ("'" + str(which) + "' needs to be the number of a phone!")
return False
return True
def delete_phone(which):
if not proper_menu_choice(which):
return
which = int(which)
del phones[which-1]
print( "Deleted phone #", which)
def edit_phone(which):
if not proper_menu_choice(which):
return
which = int(which)
phone = phones[which-1]
print("Enter the data for a new phone. Press <enter> to leave unchanged.")
print(phone[name_pos])
newname = input("Enter phone name to change or press return: ")
if newname == "":
newname = phone[name_pos]
print(phone[phone_pos])
newphone_num = input("Enter new phone number to change or press return: ")
if newphone_num == "":
newphone_num = phone[phone_pos]
phone = [newname, newphone_num]
phones[which-1] = phone
def save_phone_list():
f = open("myphones.csv", 'w', newline='')
for item in phones:
csv.writer(f).writerow(item)
f.close()
def load_phone_list():
if os.access("myphones.csv",os.F_OK):
f = open("myphones.csv")
for row in csv.reader(f):
phones.append(row)
f.close()
def show_phones():
show_phone(phone_header, "")
index = 1
for phone in phones:
show_phone(phone, index)
index = index + 1
print()
def show_phone(phone, index):
outputstr = "{0:>3} {1:<20} {2:>16}"
print(outputstr.format(index, phone[name_pos], phone[phone_pos]))
def create_phone():
print("Enter the data for a new phone:")
newname = input("Enter name: ")
newphone_num = input("Enter phone number: ")
phone = [newname,newphone_num]
phones.append(phone)
def reorder_phones():
global phones # this insures that we use the one at the top
sorted(phones, key=lambda x: x[0])
def menu_choice():
""" Find out what the user wants to do next. """
print("Choose one of the following options?")
print(" s) Show")
print(" n) New")
print(" d) Delete")
print(" e) Edit")
print(" q) Quit")
print(" r) Reorder")
choice = input("Choice: ")
if choice.lower() in ['n','d', 's','e', 'q', 'r']:
return choice.lower()
else:
print(choice +"?")
print("Invalid option")
return None
def main_loop():
load_phone_list()
while True:
choice = menu_choice()
if choice == None:
continue
if choice == 'q':
print( "Exiting...")
break # jump out of while loop
elif choice == 'n':
create_phone()
elif choice == 'd':
which = input("Which item do you want to delete? ")
print("which is ", which)
delete_phone(which)
elif choice == 's':
show_phones()
elif choice == 'e':
which = input("Which item do you want to edit? ")
print("which is ", which)
edit_phone(which)
elif choice == 'r':
reorder_phones()
else:
print("Invalid choice.")
save_phone_list()
# The following makes this program start running at main_loop()
# when executed as a stand-alone program.
if __name__ == '__main__':
main_loop()
目前没有回答
相关问题 更多 >
编程相关推荐