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

この質問には適切な締めくくりがないようだったので、そうしようと思います。

以下は、@ 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' と入力して組み込みのすべてのタートル シェイプを切り替えます。

于 2016-12-05T06:19:12.230 に答える
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 に答える