2013-09-29 65 views
-2

我正在尋找一種方式,以便每次在某個地方龜會產生一個點時,計數器變量將會增加一個,但只有該變量在該確切位置響應一個點,所以有效地記錄了一隻烏龜在特定位置製作點的次數。例如:確定一隻海龜在某個地點點了多少次

x=0 
if (turtle.dot()): 
     x+1 

但很明顯在這種情況下,計數將增加任何位置的點。提前致謝! C

+0

沒有,只是在尋找一種方式來監測的次數一隻烏龜已經取得了一定的點一個點我正在寫一個程序。 – Randoms

+0

你知道現場的位置嗎? – martineau

+0

沒有它應該是一般的任何地方,任何或所有需要的地方。 – Randoms

回答

0

你可以使用一個collections.defaultdict保持計數點,並得出自己的Turtle子類來幫助跟蹤,其中dot{}方法被調用。當調用dot()時,defaultdict的鍵將是烏龜的x和y座標。

這裏我的意思的例子:

from collections import defaultdict 
from turtle import * 

class MyTurtle(Turtle): 
    def __init__(self, *args, **kwds): 
     super(MyTurtle, self).__init__(*args, **kwds) # initialize base 
     self.dots = defaultdict(int) 

    def dot(self, *args, **kwds): 
     super(MyTurtle, self).dot(*args, **kwds) 
     self.dots[self.position()] += 1 

    def print_count(self): 
     """ print number of dots drawn, if any, at current position """ 
     print self.dots.get(self.position(), 0) # avoid creating counts of zero 

def main(turtle): 
    turtle.forward(100) 
    turtle.dot("blue") 
    turtle.left(90) 
    turtle.forward(50) 
    turtle.dot("green") 
    # go back to the start point 
    turtle.right(180) # turn completely around 
    turtle.forward(50) 
    turtle.dot("red") # put second one in same spot 
    turtle.right(90) 
    turtle.forward(100) 

if __name__ == '__main__': 
    turtle1 = MyTurtle() 
    main(turtle1) 
    mainloop() 

    for posn, count in turtle1.dots.iteritems(): 
     print('({x:5.2f}, {y:5.2f}): ' 
       '{cnt:n}'.format(x=posn[0], y=posn[1], cnt=count)) 

輸出:

(100.00, 50.00): 1 
(100.00, 0.00): 2 
+0

這似乎是一個很好的解決方案,但是還有一種方法來表示當前位置的值。所以我可以像print(self.dots [self.position()])? – Randoms

+0

是的,你可以做這樣的事情 - 參見我在我的答案更新中添加的'print_count()'方法。當你這樣做時,你必須小心,不要在'dots'字典中添加一個條目,當你真正想要做的只是從它得到一個值,如果它已經存在。 – martineau

0

您能否使用返回笛卡爾座標的turtle.pos()來檢查烏龜的位置以及點的位置?

if ((turtle.pos() == (thisX, thisY)) and turtle.dot()): 
    x+1 
+0

然而,這將工作得很好,我需要將它用於任何可能的點。有沒有辦法對其進行修改以便可能? – Randoms

+0

如果它適用於其中一個,它應該在畫布上使用任何笛卡爾「點」。只需將'thisX,thisY'設置爲您要監控的座標即可。 – AGHz