You need to enable JavaScript to run this app. Python如何正确实现OTP验证?新手用random库做文件权限验证遇死循环求助
优惠活动
大模型
产品
解决方案
定价
更多

Python如何正确实现OTP验证?新手用random库做文件权限验证遇死循环求助

OTP验证程序无限循环问题修复

现有代码的核心逻辑问题

  • 变量复用混乱:系统生成的OTP存在OTP变量里,后续你直接用用户输入值、固定字符串反复覆盖这个变量,从头到尾没有做「用户输入值」和「系统生成OTP」的实际比对。
  • 重复无效输入:连续写了两次OTP输入逻辑,第一次输入的内容存在Password变量里全程没有被调用,平白让用户多输入一次。
  • 比对逻辑错误:你把变量new_otp赋值成了固定字符串"OTP",后续循环判断时又把字符串字面值"new_otp"当成比对对象,完全和之前的变量值对不上。
  • 循环结构失效:循环体里没有重新获取用户输入的逻辑,一旦进入循环状态,既不能拿到新的输入做校验,也无法满足跳出条件。
  • 输出逻辑错位:循环体最开头直接打印欢迎语,不管后续校验是否通过,提前输出不符合流程的提示内容。
  • 依赖缺失:代码中使用了random、string模块,没有提前导入,运行初始就会触发名称错误。

触发无限循环的直接原因

你执行完OTP = new_otp后,判断条件写的是OTP != "new_otp"。这里加了引号的"new_otp"是固定字符串,不是存储正确值的变量,此时OTP的值是之前赋值的字符串"OTP",和固定字符串"new_otp"永远不相等,循环条件会永久成立,程序就会卡在循环里反复打印内容,不会自动退出。

修复后的可运行代码

import random
import string

def rand_pass(size):
    char_pool = string.ascii_uppercase + string.ascii_lowercase + string.digits
    return ''.join([random.choice(char_pool) for _ in range(size)])

# 系统生成10位OTP(实际生产环境该值会通过短信/邮件推送,不会直接在控制台打印)
system_generated_otp = rand_pass(10)
print(f'本次验证OTP:{system_generated_otp}')

# 获取用户输入完成校验
user_entered_otp = input('请输入OTP完成登录验证:')

if user_entered_otp == system_generated_otp:
    print('验证通过,已开放文件访问权限')
    # 在此处补充文件读取/访问的业务逻辑
else:
    print('ACCESS DENIED. OTP不匹配,已拒绝访问')

如果需要支持用户多次重试输入的逻辑,可以把校验部分改成带输入的循环,避免空转:

# 支持最多3次重试的版本示例
max_retry = 3
for attempt in range(max_retry):
    user_entered_otp = input('请输入OTP完成登录验证:')
    if user_entered_otp == system_generated_otp:
        print('验证通过,已开放文件访问权限')
        break
    else:
        remain_times = max_retry - attempt -1
        print(f'ACCESS DENIED. 剩余重试次数{remain_times}')
else:
    print('重试次数耗尽,已锁定访问请求')

内容的提问来源于stack exchange,提问作者GhostwhiteActualCompilers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 18:15:03