не могу остановить l oop с вводом пользователя python черепаха - PullRequest
1 голос
/ 06 мая 2020

вот мой код. Я использую пакет python turtle:

#setup
import turtle
wn = turtle.Screen()
obj = turtle.Turtle()
go = True


def restart(x, y, go = go):
    go = False
    print(go)
wn.onscreenclick(restart)
wn.listen()

#main loop
while go:
    wn.update()
    obj.forward(0.1)

print("game ended")

когда я нажимаю на экран, он должен прекратить выполнение кода после. l oop не остановится и не скажет «игра окончена», я не знаю почему.

Мне нужна помощь. спасибо!

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вы определяете локальную переменную go в своей функции restart, когда вы устанавливаете ее на False, вы изменяете только значение локальной переменной, а не переменную go из внешней области

def restart(x, y, go=go):  # This keyword argument is creating a local variable

Просто удалите аргумент, и вы измените правильную переменную

def restart(x, y):
    go = False
0 голосов
/ 06 мая 2020

Наряду с проблемой вашей глобальной переменной, на которую указывает @IainShelvington, я рекомендую вам переделать свою программу, чтобы использовать события таймера черепахи:

from turtle import Screen, Turtle

def restart(x, y):
    global running
    running = False

def move():
    if running:
        turtle.forward(0.1)
        screen.ontimer(move)
    else:
        screen.bye()

turtle = Turtle()

screen = Screen()
screen.onscreenclick(restart)

running = True

move()

screen.mainloop()

print("game ended")
...