0

shapes = ["square", "triangle", "circle"]我想用使用 onkey 函数制作的列表来改变海龟的形状。我的意思是每当我按下一个按钮时,例如 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")
4

2 回答 2

0

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

>>> t = itertools.cycle((1, 2, 3))
>>> next(t)
1
>>> next(t)
2
>>> next(t)
3
>>> next(t)
1
>>> next(t)
2
于 2012-08-30T02:13:59.103 回答
0

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

下面是使用基于@IgnacioVazquez-Abramsitertools.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”以循环浏览所有内置的海龟形状。

于 2016-12-05T06:19:12.230 回答