random - 名称 'randrange' 未定义错误,密码生成器

标签 random import passwords generator

我正在尝试编写密码生成器的代码,但它无法正常工作,而且我无法理解该错误。

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/

相关文章:

django - 如何加密为Django默认的pbkdf2_sha256加密方式?

c# - 处理密码和配置文件的最佳实践是什么?

random - 在GPU上高效获取范围内的随机数

c++ - 实现二进制搜索猜谜游戏

python - 为什么在使用 execfile() 运行的 python 脚本中 import 不能防止 NameError?

python - 保存矩阵时出错

import - 为什么 IntelliJ IDEA 可以解析类,而 Groovy/Griffon 不能?

javascript - 如何从一个数组中生成一个随机字符串然后 "remember"呢?

Python 偶数组分配

svn - 如何修复颠覆密码配置?