Переменная не определена 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