2013-04-28 103 views
0

找到我早期問題的解決方案之後,我遇到了幾個小時的新功能問題。我是Python和烏龜的新手,所以我不確定在哪裏放置命令(即定義函數之前或之後)所需的語法,以便它們將在烏龜模塊中實現,因爲我試圖模擬隨機烏龜種族,但它只是繼續提出與烏龜中心黑龜屏幕。我在做什麼,阻止命令的工作?到目前爲止THISIS我有什麼,但我想至少知道我得到的第一部分正確之前,我嘗試與其他再往前走:烏龜功能沒有被執行

import turtle 
import random 

t = turtle.Turtle('turtle') 
v = turtle.Turtle('turtle') 
s = turtle.Screen() 
s.exitonclick() 

def setup(turtle1, turtle2, s): 
    t = turtle1 
    v = turtle2 
    s.setworldcoordinates(0,0,50,50) 
    t.setposition(1,25) 
    t.up() 
    v.setposition(1,25) 
    v.up() 
    t.color('red') 
    v.color('red') 
    s = turtle.Screen() 
    s.exitonclick() 


def newHeading(turtle, angleOfTipsiness): 
    t.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 
    v.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 

我需要的開始畫面看起來像這樣:http://www.cs.ucsb.edu/~buoni/cs8/labs/lab02/start.JPG

謝謝!

回答

0

你其實並不是調用或者setupnewHeading函數。在你的代碼的末尾,你應該有一個頂級塊看起來像這樣:

# ... 

def newHeading(turtle, angleOfTipsiness): 
    t.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 
    v.setheading(random.randrange(-angleOfTipsiness, angleOfTipsiness)) 

# after the end of the function definitions, add this: 

if __name__ == '__main__': 
    # example calls, replace with ones that make sense for what 
    # you're trying to do: 
    setup(t, v, s) 
    newHeading(t, 10) 

上的代碼的幾個注:

  • setup函數使用的參數turtle1turtle2,不要將它們分配給新的局部變量tv。 (如果函數參數太長而無法反覆輸入,請給它們縮短名稱。)同樣,newHeading根本不使用turtle參數。

  • tv由於您已經擁有具有相同名稱的全局變量,因此名稱混淆局部變量。

  • 全局變量應該給出很長的描述性名稱。應該爲局部變量保留短名稱,這些變量更常用,並且在更有限的情況下使用。

一般情況下,你的函數可以訪問全局變量和使用包含的對象作爲一個全球性的資源,也可以接受對象作爲參數,並使用它的方式。對於某些情況,兩者都是有效的選擇(前者更簡單,後者更可重用),但不應混淆兩者。如果某個東西是全局變量,那麼不要將它作爲參數傳遞;如果它是一個參數,則使用它而不是全局變量,即使全局是可用的。爲同一個對象混合使用這兩種方法會使後面維護代碼的人感到困惑。

+0

好吧,我明白你在說什麼他們稱他們爲不同的變量,我改變了這一點,但爲了增加一個if語句,我不知道它會是什麼,因爲我不想用它來移動它,我只是設置它,以便它會到位。如果它不在定義範圍內,它將採用的方式。而且顏色也會很明顯。 – 2013-04-28 07:44:13

+0

@MoniqueWilliams很明顯,函數只有在被調用時纔有用,而且你沒有調用'setup'和'newHeading'函數。我建議的附加代碼應該放置在模塊的最底部(不在函數內部),並且完全按照您的要求執行:按照未定義的方式執行函數中的代碼。如果您希望發生不同的事情,請儘可能清楚地解釋所需的結果。 – user4815162342 2013-04-28 07:51:41

+0

而且是。exitonclick()'需要作爲最後的指令 – 2013-04-28 14:12:28