在我使用python的第一个(有趣的)项目中,我正在努力解决这个问题:我有四只海龟,它们在点击时循环通过一组颜色状态。我需要找到一种方法将每只的最后颜色状态反馈到我的程序中。颜色将用作用户输入。所以我为每个点击设置了一个列表、海龟和一个单独的函数,就像这样(缩短的示例):
u_choice = [a, b, c, d]
def color_change_one(x, y):
global u_choice
if t_one.color() == ('grey', 'grey'):
t_one.color('red')
u_choice[0] = 'red'
elif t_one.color() == ('red', 'red'):
t_one.color('blue')
u_choice[0] = 'blue'
t_one = turtle.Turtle()
t_one.shape('circle')
t_one.color('grey')
t_one.onclick(color_change_one)
正常工作的是单击时的颜色更改,但u_choice不会更新。那么我在这里做错了什么?
您的global u_choice
语句,因为您不会更改u_choice
的值,只是更改其元素之一。 此外,测试.pencolor()
更简单,因为.color()
会同时更新笔和填充颜色。
尝试对代码进行此返工。 它使用计时器作为u_choice
变量的独立打印机。 当您循环的三种颜色时,您应该会在控制台上看到更改:
from turtle import Turtle, Screen
u_choice = ['a', 'b', 'c', 'd']
def color_change_one(x, y):
if t_one.pencolor() == 'grey':
t_one.color('red')
elif t_one.pencolor() == 'red':
t_one.color('blue')
elif t_one.pencolor() == 'blue':
t_one.color('grey')
u_choice[0] = t_one.pencolor()
screen = Screen()
t_one = Turtle('circle')
t_one.color('grey')
u_choice[0] = t_one.pencolor()
t_one.onclick(color_change_one)
def display():
print(u_choice)
screen.ontimer(display, 1000)
display()
screen.mainloop()
当我运行这个时:
import turtle
u_choice = ['blfsd']
def color_change_one(x, y):
global u_choice
if t_one.color() == ('grey', 'grey'):
t_one.color('red')
u_choice[0] = 'red'
elif t_one.color() == ('red', 'red'):
t_one.color('blue')
u_choice[0] = 'blue'
print u_choice
t_one = turtle.Turtle()
t_one.shape('circle')
t_one.color('grey')
t_one.onclick(color_change_one)
turtle.mainloop()
每次点击后我都会看到u_choice更新。如果您在单击之前检查u_choice的值,那么它还没有更新u_choice是有道理的。