Вопрос:
У меня есть следующий код, и вы должны сделать анимацию, используя интерфейс, где часть стены меняет координаты (от 0,0 до 0,1 и т.д.), Когда вы нажимаете клавишу со стрелкой влево, частота кадров уменьшается и когда нажата правая клавиша, частота кадров увеличивается. Затем при нажатии g стена должна превратиться в змею.
Однако я не понимаю, как я могу использовать переменные, которые должны выходить из def в цикле for.
from ipy_lib import SnakeUserInterface from ipy_lib import Event ui=SnakeUserInterface(3,3) SNAKE=2 WALL=3 def Process_event(event): if event.name == «arrow» : frames(event.data) if event.name == «g»: color = SNAKE else: color = WALL return color def frames(data): frames_per_second=24 if data==»l»: frames_per_second-=0.5 if data==»r»: frames_per_second+=0.5 return frames_per_second for j in range(0,3): for i in range(0,3): event=ui.get_event() Process_event(event) ui.set_animation_speed(frames_per_second) ui.place(i, j,color) ui.show() ui.clear() Лучший ответ:
Вы не можете взять переменную из функции, она локальна для этой функции. Тем не менее, вы можете использовать переменную глобально INTO для функции, использующей ключевое слово global. Пример:
numberone = 12 def print(i): global numberone return print(str(i)) Ответ №1
Во-первых, исправьте отступ в Process_event() чтобы он всегда возвращал значение:
def Process_event(event): if event.name == «arrow» : frames(event.data) if event.name == «g»: color = SNAKE else: color = WALL return color # This line was indented too far
Затем, когда вы вызываете Process_event(event), убедитесь, что вы берете его возвращаемое значение:
for i in range(0,3): event=ui.get_event() color = Process_event(event) # Grab the value here ui.set_animation_speed(frames_per_second) ui.place(i, j,color) ui.show() ui.clear() Ответ №2
Любые переменные, созданные внутри функции, могут использоваться только в этой функции. Однако, поскольку это выглядит прямо сейчас, ваши функции возвращают переменные, и это в основном значение, так сказать, функции. Так:
def timestwo(x): print x*2 print timestwo(4)
Это вернет 8, потому что я печатаю функцию timestwo с аргументом 4, поэтому возвращаемое значение будет равно 8 и, следовательно, устанавливает timestwo (4) – 8.