【发布时间】:2020-09-29 23:23:37
【问题描述】:
我正在创建一个密码生成器,它获取所需密码的长度、字母的数量以及数字的数量。密码需要包含大写字母以及数字和特殊字符。 我不知道如何指定密码中的字母和数字的数量。这是我目前所拥有的:
import random
charslet ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
charsnum = "1234567890"
charssym = "!@#$%^&*"
def password():
pwd = ""
passlen = int(input("How long do you want the password to be?: "))
passlet = int(input("How many letters do you want in your password?: "))
passnum = int(input("How many numbers do you want in your password?: "))
passsym = int(passlen - (passlet + passnum))
chars = ""
for let in range(passlet):
chars += random.choice(charslet)
for num in range(passnum):
chars += random.choice(charsnum)
for sym in range(passsym):
chars += random.choice(charssym)
for p in range(passlen):
pwd += random.choice(chars)
print(pwd)
password()
【问题讨论】:
-
对于初学者,不要给你的函数和局部变量同名。看起来您确实指定了这两个数字。请澄清您的问题。
-
谢谢,我刚改成
pwd。当我运行程序并输入变量时,输出的密码不符合我的标准。例如,我为passlen设置了 10 个,passlet设置了 3 个,passnum设置了 3 个。所以理论上我应该收到一个包含 3 个字母、3 个数字和 4 个符号的密码,但我收到了 4##&$*c40# 作为我的输出。 -
这里有一个 Python 习惯用法:当你在做一个
for循环并且你不关心来自range()的值时,你可以使用一个下划线作为你的变量名称:_您的代码使用let、num和sym作为循环值的变量名,但您的代码不需要将它们用于任何事情。这没有错,但是使用_成语几乎就像在评论中说“我们不关心这里的循环值,我们只想循环特定次数”。
标签: python python-3.x random