@snedd

Как правильно использовать глобальные переменные в данном примере?

Я пытался реализовать механику остановки ходов противника на tkinter.
1. Для этого я ввел счетчик. Это ходы, которые противник пропускает (k)
global player, exit, fires, enemies, boost, k
k = 4

2. В этом фрагменте ф-ии keyPress я накладываю ограничения на движения противника и декрементирую k. Это вызывает ошибку UnboundLocalError: local variable 'k' referenced before assignment. Но при этом print(k) - работает и выводит 4
if k < 0:
       move_wrap(e, movement)
    check_move()
    k -= 1
    print(k)

Подскажите, пожалуйста, почему не работает декремент и сравнение.
  • Вопрос задан
  • 253 просмотра
Решения вопроса 2
tsarevfs
@tsarevfs
C++ developer
k = 1
def f():
	global k
	k += 1
f()
print(k)


А без global будет удобнее с классами:
class Game:
	def __init__(self):
		self.k = 4
		
	def key_press(self):
		self.k -= 1

game = Game()
game.key_press()
print(game.k)
Ответ написан
Комментировать
@snedd Автор вопроса
Ошибка была в этом: когда вы делаете присваивание переменной в области видимости, она становится локальной в этой области и скрывает другие переменные с таким же именем во внешних областях.
https://pythonworld.ru/osnovy/faq.html
В каждой ф-ии, где я использовал k, я объявлял ее как глобальную global k
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы