xi7yang3 发表于 2017-8-27 16:46:47

零基础python课后练习的疑问

原题:

我的代码:
print('''丨--- 欢迎进入通讯录程序 ---丨
丨 --- 1:查询联系人资料 ---丨
丨 --- 2:插入新的联系人 ---丨
丨 --- 3:删除已有联系人 ---丨
丨 --- 4:退出通讯录程序 ---丨''') #打印开头的话

dict1 = {}#创建空字典

while True:   #设置while循环
    instruction = int(input('请输入相关的指令代码:'))
    if instruction == 2:
      name_new = input('请输入联系人姓名:')
      if name_new in dict1: #检测名字是否已存在于通讯录
            print("您输入的姓名在通讯录中已存在 -->>" ,name_new, dict1)
            change = input('是否修改用户资料(YES/NO)')
            if change == 'YES': #如果输入YES修改名字对应的号码
                number_new = input('请输入用户联系电话:')
                dict1 = (name_new, number_new)
      else:
            number_new = input('请输入用户联系电话:')#如果没有存在则创建新联系人
            dict1 = (name_new, number_new)
    elif instruction == 1:
      name = input('请输入联系人姓名:')
      if name in dict1:
            print(name, ':', dict1) #打印名字及号码
      else:
            print('您输入的名字不存在!')
    elif instruction == 3:
      name_del = input('请输入要删除的联系人姓名:')
      dict1.pop(name_del)#删除字典中联系人的信息
    elif instruction == 4:
      break #输入4退出循环
    else:
      print("输入错误,请重新输入!") #输入1 2 3 4 以外的数字报错
    print('\n')
print('丨--- 感谢使用通讯录程序 ---丨') #退出循环后打印感谢语


但我运行到 “1” 这个指令的时候 输入名字后直接报错了,求问问题出在哪里?
答案和我的方法不是太一样,所以想了解一下我的错因再研究一下答案的原理!谢谢!

冬雪雪冬 发表于 2017-8-27 17:01:35

dict1 = (name_new, number_new) #变成了元组,不是字典了。
改为 dict1 =number_new
有两处哟。

xi7yang3 发表于 2017-8-27 18:40:03

冬雪雪冬 发表于 2017-8-27 17:01
dict1 = (name_new, number_new) #变成了元组,不是字典了。
改为 dict1 =number_new
有两处哟 ...

小甲鱼老师在课程里有这样定义过一个字典
dict(((1,3),(3,5),(5,7),(7,9)))
我以为这俩差不多的= =
谢谢版主大大!

xi7yang3 发表于 2017-8-27 19:36:07

冬雪雪冬 发表于 2017-8-27 17:01
dict1 = (name_new, number_new) #变成了元组,不是字典了。
改为 dict1 =number_new
有两处哟 ...

打扰了!
我刚刚测试的时候一切正常
但是在 联系人已经存在 输入新的号码之后
查询联系人 显示的还是原来的号码
我和答案比较了下,也没发现什么不同!
求解答!

冬雪雪冬 发表于 2017-8-27 19:43:09

我试了没有发现你说的问题。
丨--- 欢迎进入通讯录程序 ---丨
丨 --- 1:查询联系人资料 ---丨
丨 --- 2:插入新的联系人 ---丨
丨 --- 3:删除已有联系人 ---丨
丨 --- 4:退出通讯录程序 ---丨
请输入相关的指令代码:2
请输入联系人姓名:q
请输入用户联系电话:123


请输入相关的指令代码:1
请输入联系人姓名:q
q : 123


请输入相关的指令代码:2
请输入联系人姓名:q
您输入的姓名在通讯录中已存在 -->> q 123
是否修改用户资料(YES/NO)YES
请输入用户联系电话:345


请输入相关的指令代码:1
请输入联系人姓名:q
q : 345

xi7yang3 发表于 2017-8-27 21:00:45

冬雪雪冬 发表于 2017-8-27 19:43
我试了没有发现你说的问题。

我修改后的代码:
print('''丨--- 欢迎进入通讯录程序 ---丨
丨 --- 1:查询联系人资料 ---丨
丨 --- 2:插入新的联系人 ---丨
丨 --- 3:删除已有联系人 ---丨
丨 --- 4:退出通讯录程序 ---丨''') #打印开头的话

dict1 = {}#创建空字典

while True:   #设置while循环
    instruction = int(input('请输入相关的指令代码:'))
    if instruction == 2:
      name = input('请输入联系人姓名:')
      if name in dict1: #检测名字是否已存在于通讯录
            print("您输入的姓名在通讯录中已存在 -->>" ,name,':',dict1)
            change = input('是否修改用户资料(YES/NO)')
            if change == 'YES': #如果输入YES修改名字对应的号码
                number = input('请输入用户联系电话:')
                dict1 = number_new
      else:
            number_new = input('请输入用户联系电话:')#如果没有存在则创建新联系人
            dict1 = number_new
    elif instruction == 1:
      name = input('请输入联系人姓名:')
      if name in dict1:
            print(name,':',dict1) #打印名字及号码
      else:
            print('您输入的名字不存在!')
    elif instruction == 3:
      name_del = input('请输入要删除的联系人姓名:')
      dict1.pop(name_del)#删除字典中联系人的信息
    elif instruction == 4:
      break #输入4退出循环
    else:
      print("输入错误,请重新输入!") #输入1 2 3 4 以外的数字报错
    print('\n')
print('丨--- 感谢使用通讯录程序 ---丨') #退出循环后打印感谢语

输出结果:丨--- 欢迎进入通讯录程序 ---丨
丨 --- 1:查询联系人资料 ---丨
丨 --- 2:插入新的联系人 ---丨
丨 --- 3:删除已有联系人 ---丨
丨 --- 4:退出通讯录程序 ---丨
请输入相关的指令代码:2
请输入联系人姓名:A
请输入用户联系电话:123


请输入相关的指令代码:2
请输入联系人姓名:A
您输入的姓名在通讯录中已存在 -->> A : 123
是否修改用户资料(YES/NO)YES
请输入用户联系电话:234


请输入相关的指令代码:1
请输入联系人姓名:A
A : 123


请输入相关的指令代码:

冬雪雪冬 发表于 2017-8-27 21:16:26

17行
number_new = input('请输入用户联系电话:')

xi7yang3 发表于 2017-8-28 12:07:40

冬雪雪冬 发表于 2017-8-27 21:16
17行
number_new = input('请输入用户联系电话:')

谢谢!解决了!看来以后还得多加细心
页: [1]
查看完整版本: 零基础python课后练习的疑问