Python while循环重置次数出现Statement seems to have no effect错误如何解决
问题原因
- 第一个错误:你混淆了比较运算符和赋值运算符,
f_a == 3是判断f_a是否等于3的比较语句,不会修改f_a的值,所以会收到“语句无效果”的警告,要给变量赋值应该用单等号f_a = 3 - 第二个错误:你原代码的外层循环条件是
while f_a > 0,当f_a被减到0之后,这个循环就会直接终止,哪怕你重置了f_a的值也不会重新触发密码输入流程,需要在外层再加一层无限循环,保证锁定结束后可以重新进入输入逻辑
修复后的完整代码
''' 代码功能:实现密码校验功能,连续3次输入错误后锁定15秒,锁定结束后重置尝试次数重新输入 ''' import time # 固定密码可以提到循环外,不需要每次循环都重复赋值 set_password = "passw0rd" # 初始可尝试次数 f_a = 3 # 外层无限循环,直到密码输入正确才退出 while True: while f_a > 0: user_input = input("Please enter your password :\n") if set_password == user_input: print("You got access !") # 直接退出程序,结束所有流程 exit() else: f_a = f_a - 1 print("Error, you have", f_a, "attempts left.") if f_a == 0: print("Time out for 15 seconds.") # 简化倒计时逻辑,不需要重复写15次print和sleep for i in range(15, -1, -1): print(f"{i:02d}") time.sleep(1) # 锁定结束后重置尝试次数 f_a = 3
补充优化说明
- 把固定密码
set_password提到了循环外,避免每次循环都重复赋值浪费性能 - 用for循环实现倒计时,删除了冗余的重复打印和休眠代码,后续如果要修改锁定时长只需要修改range的第一个参数即可
内容的提问来源于stack exchange,提问作者Command_Blocks
相关产品推荐
相关产品推荐

