鱼C论坛

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

[已解决]《零基础入门学习Python》(老版) 009讲动动手0

[复制链接]
发表于 2020-3-23 07:01:57 | 显示全部楼层 |阅读模式

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

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

x
请问为什么我输入正确答案在第一第二次时,可以弹出’密码正确‘,但是第三次无论输入什么 都会显示’机会用完啦‘
总感觉这个代码是有错误的,但是说不出哪里有问题

temp = input('请输入密码:')
answer = 'FishC.com'
times = 3

while times > 1:
    if "*" in temp:
        print('密码中不能含有"*"号!','您还有', times, '次机会!', '请输入密码:', end='')
        temp = input()
    else:
        if temp == answer:
            print('密码正确,进入程序')
            break
        else:
            print('密码输入错误!','您还有', times - 1, '次机会!', '请输入密码:', end='' )
            temp = input()
            times -= 1

else:
    print('机会用完啦')


最佳答案
2020-3-23 21:57:19
uommax 发表于 2020-3-23 18:49
大概懂了!谢谢!但是还有一个小疑问,为什么第三次输入没有参加判断会直接退出,第三次输入不是还是在wh ...

按你的代码模拟一下:
1,输入错误密码;
2,times=3>1,符合条件第1次进入循环,第1次判断密码错误,打印错误,第2次输入错误密码,times-1=2;
3,times=2>1,符合条件第2次进入循环,第2次判断密码错误,打印错误,第3次输入正确密码,times-1=1;
4,times=1>1,不符合条件退出循环,运行else打印'机会用完啦'
所以没有第三次判断的机会,第三次无论输对输错都会退出循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-23 07:21:09 | 显示全部楼层
本帖最后由 qiuyouzhi 于 2020-3-23 09:08 编辑

改好了:
temp = input('请输入密码:')
answer = 'FishC.com'
times = 2

while times:
    if "*" in temp:
        print('密码中不能含有"*"号!','您还有', times, '次机会!', '请输入密码:', end='')
        temp = input()
    else:
        if temp == answer:
            print('密码正确,进入程序')
            break
        else:
            times -= 1
            print('密码输入错误!','您还有', times, '次机会!', '请输入密码:', end='' )
            temp = input()


else:
    print('机会用完啦')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 08:55:10 | 显示全部楼层
本帖最后由 uommax 于 2020-3-23 08:57 编辑


这个我试了下 也不对的。次数变成4次了,不是3次 且其他问题还是在的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 09:05:18 | 显示全部楼层
本帖最后由 sunrise085 于 2020-3-23 09:07 编辑

你应该把input放在判断之前,那样才会正常。
temp = print('请输入密码:')
answer = 'FishC.com'
times = 3

while times > 1:
    temp = input()
    if "*" in temp:
        print('密码中不能含有"*"号!','您还有', times, '次机会!', '请输入密码:', end='')
    else:
        if temp == answer:
            print('密码正确,进入程序')
            break
        else:
            print('密码输入错误!','您还有', times - 1, '次机会!', '请输入密码:', end='' )
            times -= 1
else:
    print('机会用完啦')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 10:04:54 | 显示全部楼层
你的程序只有2次循环,加上开始的input,你有3次input输入,循环里的判断只有2次,所以第三次的输入没有参加判断,直接退出:
解决方法,把input加入到循环中,保持input和判断次数相符:
answer = 'FishC.com'
times = 3

while times > 0:
    temp = input('请输入密码:')
    if "*" in temp:
        print('密码中不能含有"*"号!','您还有', times, '次机会!', end='')
    else:
        times -= 1
        if temp == answer:
            print('密码正确,进入程序')
            break
        else:
            print('密码输入错误!','您还有', times, '次机会!', end='' )

else:
    print('机会用完啦')
或者,在源代码基础上增加第三次判断,也就是改成while times>0,然后在密码判断错误后再加一次判断,不过代码太冗长了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 18:49:04 | 显示全部楼层
txxcat 发表于 2020-3-23 10:04
你的程序只有2次循环,加上开始的input,你有3次input输入,循环里的判断只有2次,所以第三次的输入没有参 ...

大概懂了!谢谢!但是还有一个小疑问,为什么第三次输入没有参加判断会直接退出,第三次输入不是还是在while循环里的嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-23 21:57:19 | 显示全部楼层    本楼为最佳答案   
uommax 发表于 2020-3-23 18:49
大概懂了!谢谢!但是还有一个小疑问,为什么第三次输入没有参加判断会直接退出,第三次输入不是还是在wh ...

按你的代码模拟一下:
1,输入错误密码;
2,times=3>1,符合条件第1次进入循环,第1次判断密码错误,打印错误,第2次输入错误密码,times-1=2;
3,times=2>1,符合条件第2次进入循环,第2次判断密码错误,打印错误,第3次输入正确密码,times-1=1;
4,times=1>1,不符合条件退出循环,运行else打印'机会用完啦'
所以没有第三次判断的机会,第三次无论输对输错都会退出循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-23 23:51:06 | 显示全部楼层
txxcat 发表于 2020-3-23 21:57
按你的代码模拟一下:
1,输入错误密码;
2,times=3>1,符合条件第1次进入循环,第1次判断密码错误, ...

非常感谢!!!懂了!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-25 08:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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