我正在尝试编写密码生成器的代码,但它无法正常工作,而且我无法理解该错误。
import random
import string
lw = list(string.ascii_lowercase)
uw = list(string.ascii_uppercase)
ns = list(string.digits)
password = ""
def addLW():
f = randrange(1, len(lw))
password = password + lw[f]
def addUW():
f = randrange(1, len(lw))
password = password + uw[f]
def addN():
f = randrange(1, len(lw))
password = password + ns[f]
funcs = [addLW, addUW, addN]
maxx = input("Password generator.\nMax: ")
if maxx.isdigit():
maxx = int(maxx)
for i in range(maxx):
func = random.choice(funcs)
func()
print(f"Password: {password}")
else:
print("Error")
完整错误:
Traceback (most recent call last):
File "Password Generator.py", line 29, in <module>
func()
File "Password Generator.py", line 14, in addUW
f = randrange(1, len(lw))
NameError: name 'randrange' is not defined
我不明白,因为我已经导入了“随机”...
最佳答案
import random
您已经导入了random
。这意味着您的全局命名空间现在包含到 random
命名空间的绑定(bind)。它不包含randrange()
或该命名空间内的任何其他内容,因此您需要明确使用random.randrange()
如果你想让它找到那个方法。
您可以将randrange
本身带入全局命名空间:
from random import randrange
但这有几个问题:
- 只有给你
randrange()
,而不是来自random
的任何其他东西; - 如果您需要其他东西,它会很快用名称污染您的全局命名空间;和
- 如果你想导入大量的东西会变得乏味(除非你导入
*
,但请参阅前面关于污染全局命名空间的要点)。
关于random - 名称 'randrange' 未定义错误,密码生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61284158/