zhou8491029 发表于 2021-5-24 09:02:16

第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)

zhou8491029 发表于 2021-5-24 09:03:01

在第33行和第34行,请教怎么修改一下

TC_DHL 发表于 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))
            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)

zhou8491029 发表于 2021-5-24 09:22:25

TC_DHL 发表于 2021-5-24 09:11
向字典增加键值对:dict [ key ] = value

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

我想知道的是为什么用update的方法不行,单独用idle实验的时候是可行的

hrp 发表于 2021-5-24 09:24:22

报什么错

zhou8491029 发表于 2021-5-24 09:29:32

hrp 发表于 2021-5-24 09:24
报什么错

报错name没有赋值

zhou8491029 发表于 2021-5-24 09:30:08

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: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'}
请输入相关的指令代码:

hrp 发表于 2021-5-24 09:33:17

zhou8491029 发表于 2021-5-24 09:30
Traceback (most recent call last):
File "F:\编程学习\老版课后作业\025通讯录小程序.py", line 34, ...

phonrbook拼错了
phonebook

TC_DHL 发表于 2021-5-24 09:34:16

hrp 发表于 2021-5-24 09:33
phonrbook拼错了
phonebook

这个确实哈哈

hrp 发表于 2021-5-24 09:34:43

本帖最后由 hrp 于 2021-5-24 09:50 编辑

zhou8491029 发表于 2021-5-24 09:31
搞错了一个字母,改过来以后运行不报错,但是实现的效果如下:
|--- 欢迎进入通讯录程序 ---|
|--- 1: ...

zhou8491029 发表于 2021-5-24 09:35:50

hrp 发表于 2021-5-24 09:33
phonrbook拼错了
phonebook

刚看到报错了,拼错了,改过来之后,会新增加一个name的键值和项,为什么前面输入的name值不能传递到updat里面

zhou8491029 发表于 2021-5-24 09:50:31

hrp 发表于 2021-5-24 09:34
其中有一处你把name当字符串了,把name的引号去掉

哪一行的啊?

hrp 发表于 2021-5-24 09:57:40

zhou8491029 发表于 2021-5-24 09:50
哪一行的啊?

phonebook.update({name: new_phonenumber})

TC_DHL 发表于 2021-5-24 09:59:59

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

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

也可以添加其他字典中的键/值, 如果键同名,则覆盖同名键的值
页: [1]
查看完整版本: 第25讲课后作业通讯录更新字典我用.update()这个方法为什么不能达到目的?