Python ошибка: глобальное имя X не определено - PullRequest
0 голосов
/ 05 марта 2020

Я приложил свой Python код ниже для программы, которую наш учитель дал нам в школе. Я продолжаю сталкиваться с ошибкой "глобальное имя 'passwordValid' не определено" и не могу найти способ решить эту проблему. Эта ошибка возникает в строке Password.append(passwordValid).

global firstName
global lastName
global cateGory
global passwordValid
global passwordNew
firstName = ""
lastName = ""
cateGory = ""


def newMember():
#Recieve user input to assign values to variables
    firstName = str(input("Please enter your first name."))
    lastName = str(input("Please enter your last name."))

    #Validation to reject unspecifyed category input
    cateGoryValid = False
    while cateGoryValid == False:
        cateGory = str(input("PLease enter your category from the following:    (Junior,Adult,Senior)"))
        cateGory = cateGory.lower()
        cateGory = cateGory.capitalize()
        if cateGory == "Junior" or cateGory == "Adult" or cateGory == "Senior":
            cateGoryValid = True
        else:
            cateGory = str(input("PLease enter your category from the following: (Junior,Adult,Senior)"))

def passwordValidation():
    #initalising global variables
    #Creating Variables
    Valid = False
    firstCharacter =""
    firstValue = 0
    lastCharacter =""
    lastValue = 0
    passwordNew = ""
    passwordValid = []

    #Create conditional loop to validate the password
    while Valid == False:
        passwordNew = str(input("Please enter a new password"))
        #Assigns both the first and last values of the password as variables
        firstCharacter = passwordNew[0]
        lastCharacter = passwordNew[-1]
        #Assigns both values as ASCII characters
        firstValue = ord(firstCharacter)
        lastValue = ord(lastCharacter)
        #Ensures password is within boundaries using ASCII characters
        if firstValue >= 65 and firstValue and lastValue >= 35 and lastValue <=37:
            passwordValid = passwordNew
            Valid = True

    return passwordValid

def valuesAppend():
    return passwordValid
    global Forname
    global Surname
    global Category
    global Password

    Forename = [""]
    Surname = [""]
    Category  =[""]
    Password = [""]
    Position = 0
    Members = ["","","",""] * 11

    #Reading the text file
    file = open("members.txt","rt")

    #Create loop to assign all fields to a record
    for line in file:
    fields = line.split(",")
    Members[Position] = [fields[0],fields[1],fields[2],fields[3]]
    #Appending the fields into a global variable
    Forename.append(fields[0])
    Surname.append(fields[1])
    Category.append(fields[2])

    Position = Position + 1

#Assigning new variables into the record
Forename.append(firstName)
Surname.append(lastName)
Category.append(cateGory)
Password.append(passwordValid)

file.close

def categoryInfo():
    totalMembers = 0
    totalMembers = len(Forename)

    for counter in range(len(Forename)):
        print(Forename[counter], Surname[counter],Category[counter])
        print("There are:",Category.count("Junior"),"Junior members.")
        print("There are:",Category.count("Adult"),"Adult members.")
        print("There are:",Category.count("Senior"),"Senior members.")
        print("The current total is:",totalMembers,"members.")

def main():
    newMember()
    passwordValidation
    valuesAppend()
    categoryInfo()

main()

1 Ответ

0 голосов
/ 05 марта 2020

Кажется, есть несколько ошибок в том, как структурирован ваш код.

Во-первых, вам не нужно определять свои переменные как глобальные, вам нужно только использовать «глобальную переменную» в локальной области функции, чтобы она знала, что она обращается к глобальной переменной, например,

password = "Password"
print(password) 
# prints "Password"

def update_pass():
    global password  # saying that the 'password' variable in this function refers to the global variable called 'password'
    password = "New password"

update_pass()
print(password)
# prints "New password"

Во-вторых, этот блок кода не подпадает ни под одну функцию и поэтому попытается запустить его перед вашей функцией main (). Убедитесь, что это правильно с отступом

#Assigning new variables into the record
Forename.append(firstName)
Surname.append(lastName)
Category.append(cateGory)
Password.append(passwordValid)

Наконец, эта функция довольно странная

def valuesAppend():
    return passwordValid
    global Forname
    # ...

Здесь ваша функция valuesAppend () попытается вернуть passwordValid и все, как только произойдет возврат остальная часть приведенного ниже кода не выполняется, поэтому вы больше не сможете использовать свою функцию

Надеюсь, это поможет

...