我正在使用一个函数来创建用户名,并使用另一个函数来创建密码。第二个函数未运行,因为它告诉我“ NameError:未定义名称'list_two'”。这是我的代码:
import random
import openpyxl
path = "E:\\Desktop\\"
wb = openpyxl.load_workbook('excel.xlsx')
sheet = wb.active
def name_generator():
usernames = list()
for username in range (0, 34):
color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]
randomColor = random.randrange(0, len(color))
randomAnimal = random.randrange(0, len(animal))
randomNumber = random.randrange(0, len(number))
username = "Username: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]
usernames.append(username)
return usernames
list = name_generator()
for i in range(1,34):
cellref = sheet.cell(row=i, column=5)
cellref.value=list[i]
def password_generator():
passwords = list_two()
for password in range (0, 34):
color = ["Red", "Green", "Blue", "White", "Black", "Yellow", "Purple", "Orange", "Pink"]
animal = ["Cat", "Dog", "Snake", "Mouse", "Tiger", "Leopard", "Moose", "Wolf", "Bear"]
number = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17", "18", "19", "20"]
randomColor = random.randrange(0, len(color))
randomAnimal = random.randrange(0, len(animal))
randomNumber = random.randrange(0, len(number))
password = "Password: " + color[randomColor] + animal[randomAnimal] + number[randomNumber]
passwords.append(password)
return passwords
list_two = password_generator()
for i in range(1,34):
cellref = sheet.cell(row=i, column=6)
cellref.value=list_two[i]
wb.save('excel_mod.xlsx')
input("Done")
我不确定是什么问题。为什么它不能与第一个功能一起使用?我尝试了不同的shell,但是它给了我相同的错误,因此我猜代码在某种程度上是错误的。
答案 0 :(得分:1)
您执行了list_two = password_generator()
,但是该函数的第一行是passwords = list_two()
,但此时list_two
尚未定义-它只会在功能已完成。同样,它也可能是一个列表,因此不可调用。您可能想将其初始化为一个空列表,例如像在passwords = []
中一样使用passwords = list()
或name_generator
。
答案 1 :(得分:0)
它给您的完整错误消息是什么?
此外,建议不要使用list
作为变量名。
例如:
list
在list = name_generator()
中。最好使用更具描述性的变量名,当您需要回顾代码或其他人需要阅读您的代码时,您将感激不尽。
此外,只需使用usernames = []
创建一个空列表类型。
答案 2 :(得分:0)
由于其他答案已经解决了发生名称错误的原因,因此,该答案仅用于阐明first
函数和second
函数之间的区别,如下所示:
为什么它不能与第一个功能一起使用?
#first function
def name_generator():
usernames = list() #<--- makes a list
...
...
return usernames
list = name_generator() #<--- assigns to a variable NAMED list
#second function
def password_generator():
passwords = list_two() #<--- ERROR: list_two is not defined as a function prior to this line
...
...
return passwords
list_two = password_generator() #<--- assigns to a variable NAMED list_two