uommax 发表于 2020-3-23 07:01:57

《零基础入门学习Python》(老版) 009讲动动手0

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

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('机会用完啦')


qiuyouzhi 发表于 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('机会用完啦')

uommax 发表于 2020-3-23 08:55:10

本帖最后由 uommax 于 2020-3-23 08:57 编辑

qiuyouzhi 发表于 2020-3-23 07:21
改好了:

这个我试了下 也不对的。次数变成4次了,不是3次 且其他问题还是在的

sunrise085 发表于 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('机会用完啦')

txxcat 发表于 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,然后在密码判断错误后再加一次判断,不过代码太冗长了。

uommax 发表于 2020-3-23 18:49:04

txxcat 发表于 2020-3-23 10:04
你的程序只有2次循环,加上开始的input,你有3次input输入,循环里的判断只有2次,所以第三次的输入没有参 ...

大概懂了!谢谢!但是还有一个小疑问,为什么第三次输入没有参加判断会直接退出,第三次输入不是还是在while循环里的嘛

txxcat 发表于 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打印'机会用完啦'
所以没有第三次判断的机会,第三次无论输对输错都会退出循环。

uommax 发表于 2020-3-23 23:51:06

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

非常感谢!!!懂了!!!
页: [1]
查看完整版本: 《零基础入门学习Python》(老版) 009讲动动手0