You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

While循环异常求助:密码生成器重复触发密码类型选择问题

问题分析与解决

核心问题:循环重复调用生成函数

你的代码里,while True循环逻辑存在冗余调用:

  1. 循环启动时先调用一次choosing()生成密码
  2. 询问是否需要再来一个,若选"yes",又手动调用一次choosing()
  3. 本次循环结束后,回到while True开头,再次执行choosing()

这就导致选"yes"时,会连续触发两次密码选择请求。

修正方案

只需要去掉if done == "yes"分支里的choosing()调用,让循环自动从头执行即可:

import random  # 原代码漏了这个导入,运行会报错

def randpasswd(length, chars=None):
    if chars == None:
        chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%¨&*()_+/*\\|<>:;"
    password = ""  # 移到if块外,避免传入自定义chars时出现未定义错误
    for i in range(length):
        password += random.choice(chars)
    return password

def choosing():
    choose = input("Choose strong or weak password: ")
    a = ["password", "crash", "intel", "working"]

    if choose == "strong":
        print(randpasswd(14))
    elif choose == "weak":  # 改用elif,避免无效输入无响应
        print(''.join(random.choices(a, k=2)))
    else:
        print("无效选择,请输入'strong'或'weak'")

while True:
    choosing()
    done = input("Do you want another password? ")
    if done == "no":
        print("password is set")
        break
    # 选"yes"无需额外操作,循环会自动回到开头调用choosing()

额外优化点

  1. 补充import random,原代码缺失会导致运行报错
  2. 调整randpasswd函数里password变量的缩进,避免传入自定义字符集时出现变量未定义错误
  3. 给choosing函数增加无效输入的提示分支,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:42