2012-08-31 68 views
-5

目前我已使用begin_polyend_poly然後register_shapeTurtle中定義了許多形狀。我希望能夠將所有這些值放入列表中,並且只需按一下按鈕,就可以在列表中循環,從而更改Turtle形狀。我在Itertools難以實現這一點,並想知道如何實現這一目標。使用Itertools循環難度

編輯:我最終得到了它,我將所有值附加到列表中,然後使用計數器來選擇要去哪個索引。

+0

解釋它是如何 「不工作」。 http://sscce.org/ – Marcin

+0

看起來問題在於你實際上沒有對從發生器獲得的值做任何事情。 – Marcin

+0

我編輯了這個問題。當我嘗試這個時,它變成了一個形狀,但是當我再次按下h時,它不會離開它。它鬼魅到其他形狀,所以我知道它是騎自行車,但它不是設置一個新的形狀。 – Hayden

回答

19

首先,創建發生器:

>>> import itertools 
>>> shape_list = ["square", "triangle", "circle", "pentagon", "star", "octagon"] 
>>> g = itertools.cycle(shape_list) 

然後調用next()只要你想一個又一個。

>>> next(g) 
'square' 
>>> next(g) 
'triangle' 
>>> next(g) 
'circle' 
>>> next(g) 
'pentagon' 
>>> next(g) 
'star' 
>>> next(g) 
'octagon' 
>>> next(g) 
'square' 
>>> next(g) 
'triangle' 

這裏有一個簡單的程序:

import itertools 
shape_list = ["square", "triangle", "circle", "pentagon", "star", "octagon"] 
g = itertools.cycle(shape_list) 
for i in xrange(8): 
    shape = next(g) 
    print "Drawing",shape 

輸出:

Drawing square 
Drawing triangle 
Drawing circle 
Drawing pentagon 
Drawing star 
Drawing octagon 
Drawing square 
Drawing triangle 
+0

我嘗試了我在編輯的問題中所做的,但仍然無法正常工作。 :S – Hayden

+0

-1這如何使OP超越他們在問題中的含義? – Marcin

+3

@Marcin:問題中的大部分代碼都來自*這個答案。最初似乎OP是在每次構建一個新的'cycle'實例,儘管從next(itertools.cycle(shape_list))1 next(itertools.cycle(shape_list))2'很難說清楚,無論這可能意味着什麼。這個答案將發電機創造與下一個元素的獲取分隔開來,這是對OP問題的完全合理解讀。 – DSM