2013-04-28 111 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