第25讲课后作业通讯录更新字典我用.update()这个方法为什么不能达到目的?
第25讲课后作业的要求我已经达到了,但是我看字典的方法里面update是更新字典,我用这个方法却达不到目的,求高手帮忙解答一下代码如下# 简易通讯录 #
print("""
|--- 欢迎进入通讯录程序 ---|
|--- 1:查询联系人资料 ---|
|--- 2:新增联系人资料 ---|
|--- 3:删除已有联系人 ---|
|--- 4:退出通讯录程序 ---|
""")
phonebook = {}
directives = (1, 2, 3, 4)
while True:
num = int(input("请输入相关的指令代码:"))
if num not in directives:
print("您输入的指令代码不对")
continue
elif num == 1:
name = input("请输入待查找联系人姓名:")
if name not in phonebook:
print("查无此人")
continue
else:
print("{0} : {1}".format(name, phonebook.get(name))) # a.get获得字典键值对应的项。
elif num == 2:
name = input("请输入待增加联系人姓名:")
if name in phonebook:
print("您输入的联系人在通讯录中已存在 -->> {0} : {1}".format(name, phonebook))
judgement = input("是否修改%s的电话号码(Y/N):" % name)
if judgement == "Y":
new_phonenumber = input("请输入%s新的电话号码:" % name)
#phonebook = new_phonenumber # 字典唯一性,更新项。不能用phonebook.update()
phonrbook.update(name = new_phonenumber)
elif judgement == "N":
continue
"""else:
judgement = input("您输入的指令有误,请重新输入(Y/N):")
continue"""
else:
phonenumber = input("请输入待增加联系人电话号码:")
phonebook.setdefault(name, phonenumber) # 查找字典,若没有对应键值,则自动添加,注意与get的区别
elif num == 3:
name = input("请输入待删除联系人姓名:")
if name not in phonebook:
print("查无此人")
continue
else:
temp = input("确认删除%s的电话号码吗(Y/N):" % name)
if temp == "Y":
phonebook.pop(name) # 弹出给定键的值并从字典中删除该键
print("%s的电话号码已删除!" % name)
continue
else:
continue
elif num == 4:
print("|--- 感谢使用通讯录程序 ---|")
break
print(phonebook)
在第33行和第34行,请教怎么修改一下 本帖最后由 TC_DHL 于 2021-5-24 09:30 编辑
向字典增加键值对:dict [ key ] = value
如果字典内已经存在了同名的key,value就会被修改
dict.update(dict2)
有相同的键会直接替换成 update 的值
print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料---|')
print('|--- 2:插入新的联系人---|')
print('|--- 3:删除已有联系人---|')
print('|--- 4:退出通讯录程序---|')
phonebook = {}
directives = (1, 2, 3, 4)
while True:
num = int(input("请输入相关的指令代码:"))
if num not in directives:
print("您输入的指令代码不对")
continue
elif num == 1:
name = input("请输入待查找联系人姓名:")
if name not in phonebook:
print("查无此人")
continue
else:
print("{0} : {1}".format(name, phonebook.get(name))) # a.get获得字典键值对应的项。
elif num == 2:
new_directives = {}# 新增的代码
name = input("请输入待增加联系人姓名:")
if name in phonebook:
print("您输入的联系人在通讯录中已存在 -->> {0} : {1}".format(name, phonebook))
judgement = input("是否修改%s的电话号码(Y/N):" % name)
if judgement == "Y":
new_phonenumber = input("请输入%s新的电话号码:" % name)
new_directives.setdefault(name, new_phonenumber)# 新增的代码
#phonebook = new_phonenumber # 字典唯一性,更新项。不能用phonebook.update()
phonebook.update(new_directives)
# print(new_directives)
elif judgement == "N":
continue
"""else:
judgement = input("您输入的指令有误,请重新输入(Y/N):")
continue"""
else:
phonenumber = input("请输入待增加联系人电话号码:")
phonebook.setdefault(name, phonenumber) # 查找字典,若没有对应键值,则自动添加,注意与get的区别
elif num == 3:
name = input("请输入待删除联系人姓名:")
if name not in phonebook:
print("查无此人")
continue
else:
temp = input("确认删除%s的电话号码吗(Y/N):" % name)
if temp == "Y":
phonebook.pop(name) # 弹出给定键的值并从字典中删除该键
print("%s的电话号码已删除!" % name)
continue
else:
continue
elif num == 4:
print("|--- 感谢使用通讯录程序 ---|")
break
print(phonebook)
TC_DHL 发表于 2021-5-24 09:11
向字典增加键值对:dict [ key ] = value
如果字典内已经存在了同名的key,value就会被修改
我想知道的是为什么用update的方法不行,单独用idle实验的时候是可行的 报什么错 hrp 发表于 2021-5-24 09:24
报什么错
报错name没有赋值 zhou8491029 发表于 2021-5-24 09:29
报错name没有赋值
Traceback (most recent call last):
File "F:\编程学习\老版课后作业\025通讯录小程序.py", line 34, in <module>
phonrbook.update(name = new_phonenumber)
NameError: name 'phonrbook' is not defined zhou8491029 发表于 2021-5-24 09:30
Traceback (most recent call last):
File "F:\编程学习\老版课后作业\025通讯录小程序.py", line 34, ...
搞错了一个字母,改过来以后运行不报错,但是实现的效果如下:
|--- 欢迎进入通讯录程序 ---|
|--- 1:查询联系人资料 ---|
|--- 2:新增联系人资料 ---|
|--- 3:删除已有联系人 ---|
|--- 4:退出通讯录程序 ---|
请输入相关的指令代码:2
请输入待增加联系人姓名:zx
请输入待增加联系人电话号码:123
{'zx': '123'}
请输入相关的指令代码:2
请输入待增加联系人姓名:zx
您输入的联系人在通讯录中已存在 -->> zx : 123
是否修改zx的电话号码(Y/N):Y
请输入zx新的电话号码:1234
{'zx': '123', 'name': '1234'}
请输入相关的指令代码: zhou8491029 发表于 2021-5-24 09:30
Traceback (most recent call last):
File "F:\编程学习\老版课后作业\025通讯录小程序.py", line 34, ...
phonrbook拼错了
phonebook hrp 发表于 2021-5-24 09:33
phonrbook拼错了
phonebook
这个确实哈哈 本帖最后由 hrp 于 2021-5-24 09:50 编辑
zhou8491029 发表于 2021-5-24 09:31
搞错了一个字母,改过来以后运行不报错,但是实现的效果如下:
|--- 欢迎进入通讯录程序 ---|
|--- 1: ...
hrp 发表于 2021-5-24 09:33
phonrbook拼错了
phonebook
刚看到报错了,拼错了,改过来之后,会新增加一个name的键值和项,为什么前面输入的name值不能传递到updat里面 hrp 发表于 2021-5-24 09:34
其中有一处你把name当字符串了,把name的引号去掉
哪一行的啊? zhou8491029 发表于 2021-5-24 09:50
哪一行的啊?
phonebook.update({name: new_phonenumber}) zhou8491029 发表于 2021-5-24 09:22
我想知道的是为什么用update的方法不行,单独用idle实验的时候是可行的
字典 update()方法用于更新字典中的键/值
可以修改存在的键对应的值, 也可以添加新的键/值对到字典
注意是存在的 键! 不是变量
也可以添加其他字典中的键/值, 如果键同名,则覆盖同名键的值
页:
[1]