Misaka2423 发表于 2020-5-10 17:40:42

小甲鱼第二十三讲课后作业的动手做一做,可以帮忙看看我自己的代码有什么大问题吗?

print("|---欢迎进入通讯录程序---|")
print("|---1:查询联系人资料---|")
print("|---2:插入新的联系人---|")
print("|---3:删除已有联系人---|")
print("|---4:退出通讯录程序---|")
num = int(input('请输入相关指令代码:'))
dict1={}
def foo(num):
    if num == 1:
       print("请输入联系人姓名:",end="")
       name1 = input("")
       if name1 not in dict1.keys():
         print('未查找到该联系人!')
       else:
            print(name1,":",dict1)
    if num == 2:
      print("请输入联系人姓名:",end="")
      name2 =input("")
      print("请输入用户联系电话:",end="")
      phone2=int(input(""))
      if name2 not in dict1.keys():
            dict1='%d'%phone2
      else:
            print("您输入的姓名在通讯录中已存在-->",name2,':',dict1)
            print('是否修改用户资料(Yes/No)',end="")
            decide1 = input("")
            if decide1 == 'Yes':
                phone21=int(input("请输入用户联系人电话:"))
                dict1='%d'%phone21
    if num == 3:
      name3 = input('请输入需要删除的联系人姓名:')
      if name3 in dict1.keys():
            dict1.pop(name3)
      else:
            print('查无此人!')
    while num == 4:
      print("|———感谢使用通讯录程序———|")
      break
    if num != 1 and num != 2 and num != 3 and num != 4:
      print('请输入正确的代码编号')
foo(num)
while num!=4:
    print("——————————————————————————————————")
    num = int(input('请输入相关指令代码:'))
    foo(num)

KevinHu 发表于 2020-5-10 19:33:22

自己运行一遍,看看有没有问题

陈尚涵 发表于 2020-5-10 20:15:45

有两个问题。
第一,25行里面,使用的应该是input而不是print,并且需接受输入;
第二,36行里面,使用while虽然能正常执行,但并不建议,看起来难看。

Twilight6 发表于 2020-5-10 22:31:05

本帖最后由 Twilight6 于 2020-5-10 23:02 编辑

20行转整型多余的操作
      phone2=int(input(""))
都学23课时了 字符串的操作应该有了解吧 用str.isdigit(),建议在开始输入代码这里加入判断输入的是不是数字,
如果不是就提示输入错误,不然报错看着多难受,代码如下:
(isdigit()如果字符串只包含数字则返回 True,否则返回 False。)
while num!=4:
    print("——————————————————————————————————")
    num = input('请输入相关指令代码:')
    if num.isdigit():
      num = int(num)
      foo(num)
    else:
      print('错误:请输入规范!')

你这里没必要把input 的值弄成int然后又用 %d 把整型的input 格式化到字符串 本来input就是字符串 无用功太多了帮你改了下也增加了输入非数字时候的提示
print("|---欢迎进入通讯录程序---|")
print("|---1:查询联系人资料---|")
print("|---2:插入新的联系人---|")
print("|---3:删除已有联系人---|")
print("|---4:退出通讯录程序---|")
num = input('请输入相关指令代码:')
dict1 = {}


def foo(num):
    if num == 1:
      name1 = input("请输入联系人姓名:")
      if name1 not in dict1.keys():
            print('未查找到该联系人!')
      else:
            print(name1, ":", dict1)
    if num == 2:
      while True:
            name2 = input("请输入联系人姓名:")
            phone2 = input("请输入用户联系电话:")
            if phone2.isdigit():
                if name2 not in dict1.keys():
                  dict1 = phone2
                else:
                  print("您输入的姓名在通讯录中已存在-->", name2, ':', dict1)
                  decide1 = input("是否修改用户资料(Yes/No)")
                  if decide1 == 'Yes':
                        phone21 = input("请输入用户联系人电话:")
                        dict1 = phone21
                break
            else:
                print('错误:输入的不是数字!请请重新输入!')

    if num == 3:
      name3 = input('请输入需要删除的联系人姓名:')
      if name3 in dict1.keys():
            dict1.pop(name3)
      else:
            print('查无此人!')
    while num == 4:
      print("|———感谢使用通讯录程序———|")
      break
    if num != 1 and num != 2 and num != 3 and num != 4:
      print('请输入正确的代码编号')

if num.isdigit():
    num = int(num)
    foo(num)
else:
    print('错误:输入的不是整数!请请重新输入!')
while True:
    print("——————————————————————————————————")
    num = input('请输入相关指令代码:')
    if num.isdigit():
      num = int(num)
      foo(num)
    else:
      print('错误:输入的不是整数!请请重新输入!')


Misaka2423 发表于 2020-5-10 22:52:37

陈尚涵 发表于 2020-5-10 20:15
有两个问题。
第一,25行里面,使用的应该是input而不是print,并且需接受输入;
第二,36行里面,使用wh ...

您好,关于您的指点我明白了。
25行的输入值我放在26行的decide中了。25行print的end参数为’‘,所以会有输入值。这种写法我是见别人这么写的,用print和Input连用,来打印和接收。
您指出的第36行里面用while印象美观,我一开始也这么想,但鄙人资质愚钝,当时并未相处有什么能结束函数的方法,故用while的break方法。
多谢您的赐教。十分感谢。
如果您能指点我更好的结束函数的方法那就真的感激不尽了。

Misaka2423 发表于 2020-5-10 23:25:40

Twilight6 发表于 2020-5-10 22:31
20行转整型多余的操作

都学23课时了 字符串的操作应该有了解吧 用str.isdigit(),建议在开始输入代码这 ...

print('|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|')
print('|‐‐‐ 1:查询联系人资料 ‐‐‐|')
print('|‐‐‐ 2:插入新的联系人 ‐‐‐|')
print('|‐‐‐ 3:删除已有联系人 ‐‐‐|')
print('|‐‐‐ 4:退出通讯录程序 ‐‐‐|')
dict1={}
num = input("请输入相关指令代码:")
def foo(num):
    if num==1:
      name1=input("请输入联系人姓名:")
      if name1 not in dict1.keys():
            print("未找到该联系人!")
      else:
            print(name1,":",dict1)
    if num==2:
      name2=input("请输入联系人姓名:")
      phone2=input("请输入用户联系电话:")
      if name2 not in dict1.keys():
            dict1=phone2
      else:
            print("您输入的姓名在通讯录中已存在-->",name2,":",dict1)
            decide1=input("是否修改用户资料(Yes/No)")
            if decide1=="Yes":
                phone21=input("请输入用户联系人电话:")
                dict1=phone21
    if num==3:
      name3=input("请输入需要删除的联系人姓名:")
      if name3 in dict1.keys():
            dict1.pop(name3)
      else:
            print("您输入的用户不在联系人列表中!")
    while num==4:
      print("|———感谢使用通讯录程序———|")
      break
    if num!=1 and num!=2 and num!=3 and num!=4:
            print("请输入正确的指令代码!")
if num.isdigit():
    num=int(num)
    foo(num)
else:
    print("Error:请规范化输入!")
while num!=4:
    print("——————————————————————————————————")
    num = input("请输入相关指令代码:")
    if num.isdigit():
      num=int(num)
      foo(num)
    else:
      print("Error:请规范您的输入!")
我重新修改了下,把您说的多余的无用功的地方划去了。
多谢您的指点。十分感谢。

Twilight6 发表于 2020-5-10 23:28:09

Misaka2423 发表于 2020-5-10 23:25
我重新修改了下,把您说的多余的无用功的地方划去了。
多谢您的指点。十分感谢。

加油,input输出本身就是字符串,你用%来格式化也是把其他类型的东西转成字符串的,所以说一开始直接用字符串最好啦~

Misaka2423 发表于 2020-5-10 23:37:35

Twilight6 发表于 2020-5-10 23:28
加油,input输出本身就是字符串,你用%来格式化也是把其他类型的东西转成字符串的,所以说一开始直接用字 ...

好的,受教了。谢谢您。{:10_288:}
页: [1]
查看完整版本: 小甲鱼第二十三讲课后作业的动手做一做,可以帮忙看看我自己的代码有什么大问题吗?