Python随机密码生成器额外输出随机字符串问题排查
问题根因
你看到的11位密码下方的多余长串字符,是代码两处逻辑错误共同导致的:
generate()函数中,你给generated_pwd赋的初始值是string.ascii_letters,这个常量本身就是包含全部大小写英文字母的长字符串,不是你生成的11位随机密码- 你在
generate()函数内打印完11位随机密码后,没有把这个11位密码存为返回值,反而把全量字母组成的常量返回了 - 回到
add()函数调用generate()后,你又主动打印了返回的全量字母常量,还拼接字符串再打了一次,这串多余内容就是这么来的。
修复后的完整代码
import string import random def generate(): char_source = string.ascii_letters print("Generating...\n") # 先生成11位密码,存为变量 generated_pwd = ''.join(random.choice(char_source) for i in range(11)) print(f"Your randomly generated key is: {generated_pwd}") # 返回实际生成的11位密码,而非全量字符集 return generated_pwd def add(): username = input("What is your username: ") pwd = input("What is password: (for random, type 'generate') ") if pwd == 'generate': generated_pwd = generate() pwd = generated_pwd # 不需要重复提示密码的话可以删掉下一行,避免重复输出 # print("your password is " + pwd) return generated_pwd if __name__ == "__main__": add()
核心修改点
- 调整
generate()内的赋值逻辑:把生成的11位随机密码赋值给generated_pwd作为返回值,不再返回全量字符常量 - 删除
add()函数中多余的print(generated_pwd)语句,避免无意义输出 - 修正了用户名输入提示的拼写错误
- 可选:如果不需要二次提示密码,注释掉
add()中最后一行打印密码的代码即可,程序只会输出一次生成的11位密码,符合你的预期。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

