Переменная не определена PYTHON 3.5.2

def GameMode():#creates a function with name of gamemode
    global wrong_answer_1
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            keyword_c = values
            global keyword_c
    for keys,values in definition.items():#checks for the right answer
        if keys == code + 1:#if the keys equal the code add 1
            definition_c = values#set s to be the values
    for keys,values in definition.items():#checks for the right answer
        if inc == keys:#if the keys equal the code add 1
            wrong_answer_1 = values#set s to be the values
    for keys,value in definition.items():#For the keys in the dictionary
        if keys == inc2:#if the keys equal to a value
            global wrong_answer_2
            wrong_answer_2 = value

    print(wrong_answer_2, "Hi")

Я пытаюсь сделать мои переменные keyword_c, definition_c, false_answer_1 и false_answer_2 глобальными, чтобы я мог использовать их в другой функции, но я не могу заставить ее работать, я немного новичок, когда дело доходит до Python. Я пытался использовать "глобальный", как вы можете видеть выше, и я пытался вызывать переменные и передавать их, но я не до конца понимаю это, чтобы понять это.

keyword_c = ''
definition_c = ''
wrong_answer_1 = ''
wrong_answer_2 = ''

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

Traceback (most recent call last):
  File "D:\Program.py", line 67, in <module>
   GameMode()#calls the function
  File "D:\Program.py", line 55, in GameMode
    print(wrong_answer_2, "Hi")
NameError: name 'wrong_answer_2' is not defined

вот ошибка, которую я получаю, если удалить исходную строку, которая устанавливает ее как пустую строку

2 ответа

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

def GameMode():#creates a function with name of gamemode
    global inc, inc2, code, wrong_answer_1, wrong_answer_2, keyword_c
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            keyword_c = values
    for keys,values in definition.items():#checks for the right answer
        if keys == code + 1:#if the keys equal the code add 1
            definition_c = values#set s to be the values
    for keys,values in definition.items():#checks for the right answer
        if inc == keys:#if the keys equal the code add 1
            wrong_answer_1 = values#set s to be the values
    for keys,value in definition.items():#For the keys in the dictionary
        if keys == inc2:#if the keys equal to a value
            wrong_answer_2 = value

    print(wrong_answer_2, "Hi")

keywords = {
    1: 'a',
}
definition = {
    1: 'a',
}
code = 1
inc = 1
inc2 = 1
wrong_answer_1 = None
wrong_answer_2 = None
keyword_c = None

GameMode()
print(inc, inc2, code, wrong_answer_1, wrong_answer_2, keyword_c)

Это будет выводить:

a Hi
1 1 1 a a a

Почему вы не хотите создать класс с переменными:

self.keyword_c = ''
self.definition_c = ''
self.wrong_answer_1 = ''
self.wrong_answer_2 = ''

поэтому переменные будут глобальными (если каждый метод и переменная находятся внутри класса) и с вашим методом:

def GameMode(self):#creates a function with name of gamemode
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            self.keyword_c = values
            #(...)

И на самом деле, вот ошибка, которая может привести к ошибке (прокомментировал это):

def GameMode():#creates a function with name of gamemode
    global wrong_answer_1
    for keys,values in keywords.items():#checks for the right answer
        if keys == code:#if the keys equal to the code value
            keyword_c = values # keyword_c doesn't exist here, you cannot assign here
            global keyword_c   # its created here, so it now exists
Другие вопросы по тегам