鱼C论坛

 找回密码
 立即注册
查看: 855|回复: 7

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

[复制链接]
发表于 2020-5-10 17:40:42 | 显示全部楼层 |阅读模式

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

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

x
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[name1])
    if num == 2:
        print("请输入联系人姓名:",end="")
        name2 =input("")
        print("请输入用户联系电话:",end="")
        phone2=int(input(""))
        if name2 not in dict1.keys():
            dict1[name2]='%d'%phone2
        else:
            print("您输入的姓名在通讯录中已存在-->",name2,':',dict1[name2])
            print('是否修改用户资料(Yes/No)',end="")
            decide1 = input("")
            if decide1 == 'Yes':
                phone21=int(input("请输入用户联系人电话:"))
                dict1[name2]='%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)
最佳答案
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[name1])
    if num == 2:
        while True:
            name2 = input("请输入联系人姓名:")
            phone2 = input("请输入用户联系电话:")
            if phone2.isdigit():
                if name2 not in dict1.keys():
                    dict1[name2] = phone2
                else:
                    print("您输入的姓名在通讯录中已存在-->", name2, ':', dict1[name2])
                    decide1 = input("是否修改用户资料(Yes/No)")
                    if decide1 == 'Yes':
                        phone21 = input("请输入用户联系人电话:")
                        dict1[name2] = 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('错误:输入的不是整数!请请重新输入!')


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

使用道具 举报

发表于 2020-5-10 19:33:22 | 显示全部楼层
自己运行一遍,看看有没有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-10 20:15:45 | 显示全部楼层
有两个问题。
第一,25行里面,使用的应该是input而不是print,并且需接受输入;
第二,36行里面,使用while虽然能正常执行,但并不建议,看起来难看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[name1])
    if num == 2:
        while True:
            name2 = input("请输入联系人姓名:")
            phone2 = input("请输入用户联系电话:")
            if phone2.isdigit():
                if name2 not in dict1.keys():
                    dict1[name2] = phone2
                else:
                    print("您输入的姓名在通讯录中已存在-->", name2, ':', dict1[name2])
                    decide1 = input("是否修改用户资料(Yes/No)")
                    if decide1 == 'Yes':
                        phone21 = input("请输入用户联系人电话:")
                        dict1[name2] = 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('错误:输入的不是整数!请请重新输入!')


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

使用道具 举报

 楼主| 发表于 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方法。
多谢您的赐教。十分感谢。
如果您能指点我更好的结束函数的方法那就真的感激不尽了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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[name1])
    if num==2:
        name2=input("请输入联系人姓名:")
        phone2=input("请输入用户联系电话:")
        if name2 not in dict1.keys():
            dict1[name2]=phone2
        else:
            print("您输入的姓名在通讯录中已存在-->",name2,":",dict1[name2])
            decide1=input("是否修改用户资料(Yes/No)")
            if decide1=="Yes":
                phone21=input("请输入用户联系人电话:")
                dict1[name2]=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:请规范您的输入!")
我重新修改了下,把您说的多余的无用功的地方划去了。
多谢您的指点。十分感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

加油,input输出本身就是字符串,你用%来格式化也是把其他类型的东西转成字符串的,所以说一开始直接用字符串最好啦~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

好的,受教了。谢谢您。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-27 06:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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