如何在海龟点击功能中分配要列出的值



在我使用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是有道理的。

相关内容

  • 没有找到相关文章

最新更新