Я прочитал в нескольких постах здесь о переполнении стека, что «В среде, управляемой событиями, такой как черепаха, никогда не должно быть while True:
, поскольку она потенциально блокирует события (например, клавиатура).»
Вот это Python Программа Turtle, которая, кажется, работает нормально, но использует конструкцию while True:
.
Может кто-нибудь объяснить, почему этот подход неправильный, что создает проблемы и каков правильный путь для достижения того же результата? ?
import turtle
import time
def move_snake():
"""
This function updates the position of the snake's head according to its direction.
"""
if head.direction == "up":
head.sety(head.ycor() + 20)
def go_up():
"""
callback for up key.
"""
if head.direction != "down":
head.direction = "up"
# Set up screen
screen = turtle.Screen()
screen.tracer(0) # Disable animation so we can update screen manually.
# Event handlers
screen.listen()
screen.onkey(go_up, "Up")
# Snake head
head = turtle.Turtle()
head.shape("square")
head.penup()
head.direction = "stopped" # Cheeky use of instance property to avoid global variable.
while True:
move_snake()
screen.update()
time.sleep(0.2)
turtle.done()