鱼C论坛

 找回密码
 立即注册
查看: 2188|回复: 14

[已解决]第25讲课后作业通讯录更新字典我用.update()这个方法为什么不能达到目的?

[复制链接]
发表于 2021-5-24 09:02:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第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[name]))
            judgement = input("是否修改%s的电话号码(Y/N):" % name)
            if judgement == "Y":
                new_phonenumber = input("请输入%s新的电话号码:" % name)
                #phonebook[name] = 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)
最佳答案
2021-5-24 09:57:40
zhou8491029 发表于 2021-5-24 09:50
哪一行的啊?

phonebook.update({name: new_phonenumber})
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-5-24 09:03:01 | 显示全部楼层
在第33行和第34行,请教怎么修改一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:11:15 | 显示全部楼层
本帖最后由 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[name]))
            judgement = input("是否修改%s的电话号码(Y/N):" % name)
            if judgement == "Y":
                new_phonenumber = input("请输入%s新的电话号码:" % name)
                new_directives.setdefault(name, new_phonenumber)# 新增的代码
                #phonebook[name] = 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-24 09:22:25 | 显示全部楼层
TC_DHL 发表于 2021-5-24 09:11
向字典增加键值对:dict [ key ] = value

如果字典内已经存在了同名的key,value就会被修改

我想知道的是为什么用update的方法不行,单独用idle实验的时候是可行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:24:22 From FishC Mobile | 显示全部楼层
报什么错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-24 09:29:32 | 显示全部楼层

报错name没有赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-24 09:30:08 | 显示全部楼层

Traceback (most recent call last):
  File "F:\编程学习\老版课后作业\025通讯录小程序.py", line 34, in <module>
    phonrbook.update(name = new_phonenumber)
NameError: name 'phonrbook' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-24 09:31:47 | 显示全部楼层
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'}
请输入相关的指令代码:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:33:17 From FishC Mobile | 显示全部楼层
zhou8491029 发表于 2021-5-24 09:30
Traceback (most recent call last):
  File "F:\编程学习\老版课后作业\025通讯录小程序.py", line 34, ...

phonrbook拼错了
phonebook
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:34:16 | 显示全部楼层
hrp 发表于 2021-5-24 09:33
phonrbook拼错了
phonebook

这个确实哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:34:43 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2021-5-24 09:50 编辑
zhou8491029 发表于 2021-5-24 09:31
搞错了一个字母,改过来以后运行不报错,但是实现的效果如下:
|--- 欢迎进入通讯录程序 ---|
|--- 1: ...


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-24 09:35:50 | 显示全部楼层
hrp 发表于 2021-5-24 09:33
phonrbook拼错了
phonebook

刚看到报错了,拼错了,改过来之后,会新增加一个name的键值和项,为什么前面输入的name值不能传递到updat里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-24 09:50:31 | 显示全部楼层
hrp 发表于 2021-5-24 09:34
其中有一处你把name当字符串了,把name的引号去掉

哪一行的啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:57:40 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
zhou8491029 发表于 2021-5-24 09:50
哪一行的啊?

phonebook.update({name: new_phonenumber})
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-24 09:59:59 | 显示全部楼层
zhou8491029 发表于 2021-5-24 09:22
我想知道的是为什么用update的方法不行,单独用idle实验的时候是可行的

字典 update()方法用于更新字典中的键/值
可以修改存在的键对应的值, 也可以添加新的键/值对到字典
注意是存在的 键! 不是变量

也可以添加其他字典中的键/值, 如果键同名,则覆盖同名键的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 17:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表