python-3.x - 电话簿不能存储 2 个同姓的人
问题描述
电话簿不能存储多个同名的人。例如,如果我有一个姓氏 x 的条目,并且我尝试创建一个姓氏 x 的新条目,它将用最后一个 x 输入的信息替换之前的 x。这是code.blablablablablabla(我不能说更多,但它不允许我发布)
# Used to store the entries in the telephone book
entries = []
new_entries = {}
# Create flag to decide when the program ix exited
exit_program = False
while exit_program == False:
print( "Welcome to the EG-244 Telephone Book" )
print( "------------------------------------\n" )
print( "Please select from one of the following options:" )
print( "\t1. Add a new entry" )
print( "\t2. List entries" )
print( "\t3. Search for an entry" )
print( "\t4. Delete an entry" )
print( "\t5. Add a personal note" )
print( "\t6. Remove a personal note" )
print( "\t7. Quit" )
menu_input = input()
menu_num = int(menu_input)
if menu_num == 1:
print("\nCan i have your Last name, First name,Age and phone number please")
last_name=input("Last name:")
name=input("Name:")
age=input("Age:")
phone=input("Phone number:")
new_entries[last_name] = {'Last Name':last_name, 'First Name':name, 'Age':age, 'Telephone':phone,'Personal Notes':{'1.':'', '2.':''}}
entries.append(new_entries.copy())
entries=sorted(new_entries.keys(), key=lambda x:x.lower())
continue
elif menu_num == 2:
if len(new_entries) == 0:
print("No entries have been submitted yet")
continue
else:
for i in entries:
values=new_entries[i]
print("Last Name:" + i)
print("First Name:"+values['First Name'])
print("Age:"+values['Age'])
print("Phone Number:"+values['Telephone'])
print('Personal Note 1.:'+values['Personal Notes']['1.'])
print('Personal Note 2.:'+values['Personal Notes']['2.'])
print("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
print("Currently there are" + str(len(entries)) + "entries")
continue
elif menu_num == 3:
print("\nInsert the last name:")
last_name=input()
if last_name in new_entries:
print (last_name, new_entries[last_name])
continue
else:
print("\nThe person is not in the phone book")
continue
elif menu_num == 4:
print("\nInsert the Last name of the entry to be deleted:")
last_name=input()
if last_name in new_entries:
del new_entries[last_name]
print("Entry has been deleted")
continue
else:
print("The entry does not exist")
continue
elif menu_num ==5:
print("Can I have your last and first name please:")
last_name=input("Last name:")
name=input("First name:")
note=input("Personal Note:")
note_1=input("Another personal Note:")
name in [x for v in new_entries.values() for x in v]
if last_name in new_entries:
new_entries[last_name]['Personal Notes']['1.']=note
new_entries[last_name]['Personal Notes']['2.']=note_1
print (last_name, new_entries[last_name])
continue
else:
print("This entry does not exist")
continue
if menu_num == 6:
print("Can I have your last and first name please:")
last_name=input("Last name:")
name=input("First name:")
delete=input("Delete note 1 or 2?")
delete=int(delete)
name in [x for v in new_entries.values() for x in v]
if last_name in new_entries:
for notes in new_entries.values():
if delete == 1:
new_entries[last_name]['Personal Notes']['1.']=''
print("1st Note deleted")
elif delete == 2:
new_entries[last_name]['Personal Notes']['2.']=''
print("2nd Note deleted")
continue
else:
print("This entry does not exist")
elif menu_num == 7:
exit_program = True
else:
print( "Error: You entered an invalid choice. Please try again." )
print( "Thank you for using the EG-244 Telephone Book" )
解决方案
我觉得
new_entries[last_name] = {'Last Name':last_name, 'First Name':name, 'Age':age, 'Telephone':phone,'Personal Notes':{'1.':'', '2.':''}}
应该是一个包含字典而不仅仅是字典的列表。
new_entries[last_name] = [{'Last Name':last_name, 'First Name':name, 'Age':age, 'Telephone':phone,'Personal Notes':{'1.':'', '2.':''}}]
这样,您可以将另一个项目附加到存储在同一last_name
键下的列表中。
然后,您必须更新其余代码以处理此新数据结构。
推荐阅读
- html - 我可以使用 CSS 设置 HTML 目录属性吗
- xcode - Swift 包管理器有本地缓存吗?
- python - 嵌套循环?(我因此而做噩梦)
- javascript - 从父组件角度更新子组件输入
- suitescript2.0 - 如何在 SuiteScript 中实现 findSublistLineWithValue 函数?
- python - 如何处理不是分组大小倍数的序列上的值的滑动窗口?
- c++ - 在 .txt 文件中写入包含变量(字符串和 int)的行
- javascript - Json 未在 github 存储库中更新
- python - R 片段到 Python
- python - 替代 pandas 应用函数,用于对具有多个数据帧的数据帧列进行逐行操作