Ootme 发表于 2019-11-12 18:03:49

关于给3次机会验证密码的程序问题

secret1 = ('123')
temp = input('请输入密码\n')
secret2 = str(temp)
i=1
while (secret1 != secret2) or (i<3):
    if secret1 == secret2:
      print('密码正确')
      break
    else:
      if i < 3:
            if '*' in secret2:
                temp = input('请输入密码\n')
                secret2 = str(temp)
            else:
                print('密码错误')
                temp = input('请输入密码\n')
                secret2 = str(temp)
                i+=1            
      else:
            print('密码错误')
            print('次数用完')
            break
print('结束')


求助各位大佬们
为什么我前两次输入带星号不会记入次数
最后一次输入带星号的 就显示密码错误 次数用完

倒戈卸甲 发表于 2019-11-12 21:38:01

本帖最后由 倒戈卸甲 于 2019-11-12 21:42 编辑

因为缩进。
else:
            print('密码错误')
            print('次数用完')
            break
这几句与if i<3 是位于相同缩进的
而i f '*' in secret2:
                temp = input('请输入密码\n')
                secret2 = str(temp)
是if i<3 的下层缩进,一旦错误两次,第三次输入时i的值已经为3,根本不会被执行。
第三次输入时,要么输入正确,执行
if secret1 == secret2:
      print('密码正确')
      break
这几行语句,要么也不符合i<3,直接去执行
else:
            print('密码错误')
            print('次数用完')
            break

Ootme 发表于 2019-11-13 10:45:38

倒戈卸甲 发表于 2019-11-12 21:38
因为缩进。
else:
            print('密码错误')


那我如果想在这个程序上改 应该怎么改呢

倒戈卸甲 发表于 2019-11-13 11:28:06

本帖最后由 倒戈卸甲 于 2019-11-13 11:30 编辑

Ootme 发表于 2019-11-13 10:45
那我如果想在这个程序上改 应该怎么改呢

最简单的,把if '*' in secret2的情形放到if i<3前面去。

Ootme 发表于 2019-11-13 17:09:24

倒戈卸甲 发表于 2019-11-13 11:28
最简单的,把if '*' in secret2的情形放到if i<3前面去。

谢了终于弄好了
页: [1]
查看完整版本: 关于给3次机会验证密码的程序问题