如何使用python中的onkey函数更改列表的位置

时间:2012-08-30 02:09:42

标签: python list turtle-graphics

我想通过使用onkey函数更改已使用shapes = ["square", "triangle", "circle"]的列表更改乌龟的形状。我的意思是每当我按下一个按钮时,例如h,我将如何制作它,以便每次按h时它都会通过每个形状。我将使用turtle.shape ()函数来实现此目的。

到目前为止,我已经创建了一个形状列表,但我不知道如何实现我想要实现的下一个目标。

  def turtle1 ():
   shapes = ["square", "triangle", "circle", "pentagon", "star", "octagon"]
   shapeiter = itertools.cycle(shapes)
   next(shapeiter)
   1
   shape(next(shapeiter))
   next(shapeiter)
   2
   shape(next(shapeiter))
   next(shapeiter)
   3
   shape(next(shapeiter))
   next(shapeiter)
   4
   shape(next(shapeiter))
   next(shapeiter)
   5
   shape(next(shapeiter))
   next(shapeiter)
   6
   shape(next(shapeiter))


 onkey(turtle1, "h")

2 个答案:

答案 0 :(得分:0)

itertools.cycle()会让您无限期地循环播放序列。

>>> t = itertools.cycle((1, 2, 3))
>>> next(t)
1
>>> next(t)
2
>>> next(t)
3
>>> next(t)
1
>>> next(t)
2

答案 1 :(得分:0)

这个问题似乎没有得到适当的结束,所以我将尝试这样做。

以下是使用@ IgnacioVazquez-Abrams'itertools.cycle()解决方案的重写。 @ Hayden的原始代码列出了不一定有效的形状,这可能导致他的代码过早退出。我使用turtle.getshapes()来获取有效的形状,我还更改了窗口标题以提供形状名称:

import turtle
import itertools

def reshape():
    turtle.shape(next(shape_iterator))

    turtle.title(turtle.shape())

screen = turtle.Screen()

shape_iterator = itertools.cycle(screen.getshapes())

screen.onkey(reshape, "h")

screen.listen()

reshape()

screen.mainloop()

单击窗口使其激活,然后键入“h”以循环显示所有内置龟形状。