«NameError: name '' не определено» при использовании двух функций - PullRequest
0 голосов
/ 04 мая 2019

Я использую одну функцию для создания имени пользователя и другую функцию для создания пароля.Вторая функция не запущена, потому что она говорит мне, что «NameError: name '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")

Я не совсем уверен, в чем проблема.Почему он работает с первой функцией, а не со второй?Я пробовал разные оболочки, но выдает ту же ошибку, так что я предполагаю, что код каким-то образом неправильный.

Ответы [ 3 ]

1 голос
/ 04 мая 2019

Вы делаете list_two = password_generator(), но тогда самая первая строка в этой функции - passwords = list_two(), но list_two еще не определено в этой точке - она ​​будет иметь значение только после завершения функции.Кроме того, тогда он, вероятно, будет списком и, следовательно, не будет вызываться.Возможно, вы хотели инициализировать его как пустой список, например, используйте passwords = [] или passwords = list(), как вы это делали в name_generator.

0 голосов
/ 04 мая 2019

Так как другие ответы уже позаботились о том, почему происходит ошибка имени, этот ответ просто служит для выяснения различий между функцией 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
0 голосов
/ 04 мая 2019

Какое полное сообщение об ошибке выдает?

Кроме того, рекомендуется не использовать list в качестве имени переменной.

Например:

list в list = name_generator(). Лучше использовать более описательное имя переменной, вы будете благодарны, когда вам нужно оглянуться назад на свой код или если кто-то еще должен прочитать ваш код.

Кроме того, просто используйте usernames = [], чтобы создать пустой тип списка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...