While循环异常求助:密码生成器重复触发密码类型选择问题
问题分析与解决
核心问题:循环重复调用生成函数
你的代码里,while True循环逻辑存在冗余调用:
- 循环启动时先调用一次
choosing()生成密码 - 询问是否需要再来一个,若选"yes",又手动调用一次
choosing() - 本次循环结束后,回到
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()
额外优化点
- 补充
import random,原代码缺失会导致运行报错 - 调整
randpasswd函数里password变量的缩进,避免传入自定义字符集时出现变量未定义错误 - 给
choosing函数增加无效输入的提示分支,提升用户体验
内容的提问来源于stack exchange,提问作者Usman
相关产品推荐
相关产品推荐

