2014-03-31 141 views
4

我无法完成一个Python乌龟程序。当我尝试输入x和y坐标以及像 t.drawSnowman(x = 25,y = 25,radius = 25)这样的函数的半径值时,输入值时程序会出现异常。但如果我忽略上面的参数,而只是使用t.drawSnowman()该程序按预期工作,但我无法创建雪人的各种实例。Python简单的乌龟程序

我真的很想找到如何输入参数,仍然有程序功能的帮助。

这里是我的代码

import turtle 

class MyTurtle(turtle.Turtle): 
"""""" 


def __init__(self): 
    """Turtle Constructor""" 
    turtle.Turtle.__init__(self, shape="turtle") 

def drawNose(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draw nose ''' 
    self.pendown() 
    self.goto(-(radius) * (0.25),(radius * 6)+(radius * 4)+(radius)) 
    self.goto(0,(radius * 6)+(radius * 4)+(radius)+(radius * (0.25))) 
    self.goto((radius) * (0.25),(radius * 6)+(radius * 4)+(radius)) 
    self.goto(0,(radius * 6)+(radius * 4)+(radius)) 
    self.penup() 

def leftEye(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draw left eye''' 
    self.pendown() 
    self.circle(radius*(.25)) 
    self.penup() 
def rightEye(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draw right eye''' 
    self.pendown() 
    self.circle(radius*(.25)) 
    self.penup() 
def bottomOfHat(self, x=0, y=0, radius = 15, circle_color = "black"): 
    ''' draw the long part of the hat at the bottom ''' 
    self.goto(0,(radius * 6)+(radius * 4)+(radius * 2)) 
    self.pendown() 
    self.goto(-(radius),(radius * 6)+(radius * 4)+(radius * 2)) 
    self.goto(-(radius),(radius * 6)+(radius * 4)+(radius * 2)+(radius * (0.5))) 
    self.goto(radius,(radius * 6)+(radius * 4)+(radius * 2)+(radius * (0.5))) 
    self.goto(radius,(radius * 6)+(radius * 4)+(radius * 2)) 
    self.goto(0,(radius * 6)+(radius * 4)+(radius * 2)) 
    self.penup() 

def topOfHat(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draw the top bigger part of the hat''' 
    self.goto(radius*(.75),(radius * 6)+(radius * 4)+(radius * 2)+(radius * (0.5))) 
    self.pendown() 
    self.goto(radius*(.75),(radius * 6)+(radius * 4)+(radius * 2)+(radius * 2)) 
    self.goto(-(radius)*(.75),(radius * 6)+(radius * 4)+(radius * 2)+(radius * 2)) 
    self.goto(-(radius)*(.75),(radius * 6)+(radius * 4)+(radius * 2)+(radius * (0.5))) 

def bottomCircle(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draws the bottom circle''' 
    self.pendown() 
    self.circle(radius * 3) 
    self.penup() 
def middleCircle(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draw the middle circle''' 
    self.pendown() 
    self.circle(radius * 2) 
    self.penup() 
def topCircle(self, x=0, y=0, radius = 15, circle_color = "black"): 
    '''draw the top circle''' 
    self.pendown() 
    self.circle(radius) 
    self.penup() 
def drawSnowman(self, x=0, y=0, radius = 15, circle_color = "black"): 
    self.bottomCircle() 
    self.goto(0,radius * 6) 
    self.middleCircle() 
    self.goto(0,(radius * 6)+(radius * 4)) 
    self.topCircle() 
    self.goto(-(radius) * (0.5),(radius * 6)+(radius * 4)+(radius)) 
    self.leftEye() 
    self.goto((radius) * (0.5),(radius * 6)+(radius * 4)+(radius)) 
    self.rightEye() 
    self.goto(0,(radius * 6)+(radius * 4)+(radius)) 
    self.drawNose() 
    self.bottomOfHat() 
    self.topOfHat() 



t = MyTurtle() 
t.hideturtle() 
radius = 15 
t.drawSnowman(x = 25,y = 25,radius = 25) 

这是雪人的照片,当我使用的参数 t.drawsnowman(X = 25 Y = 25米半径= 25) messed up snowman

这是雪人,当我inuput没有参数t.drawsnowman() correct snowman

+2

您传递x和y参数来绘制雪人,但是您并没有在里面使用它们。我可以看到你只使用半径。你画什么意思不起作用? –

+0

您应该发布编译输出,以便我们可以看到它以何种方式无法正常工作。我假设你使用这个:https://docs.python.org/2/library/turtle.html(?) – powlo

+0

是的,我使用乌龟图形,所以没有任何编译输出,因为所需的结果是绘制图片,在这种情况下是一个雪人。通过绘图不起作用我的意思是当我运行程序时,我在屏幕上看到了雪人的不同部分。而不是三个雪球在一起我得到每个雪球之间的20个像素的空间。 –

回答

2

尝试一步一步,并找出你的代码实际上做了什么(或使用调试器)。

  • 如果你打电话t.drawSnowman()radius15
  • 你叫bottomCircle()这将画一个圆与radius * 3 = 45
  • 您在Y轴移动radius * 6 = 90半径(你现在“顶部”圆的
  • 你叫middleCircle()将与radius * 2为半径的圆= 30
  • ...

现在,看看会发生什么,如果你卡L您的功能与参数:

  • 如果你打电话t.drawSnowman(x = 25,y = 25,radius = 25)radius25
  • 你打电话bottomCircle(),它将绘制一个半径为radius * 3 = 45的圆。注意局部变量radius15,因为它是该参数的默认值,并且您不会将传递给drawSnowman的值传递给bottomCircle方法。
  • 您在Y轴移动radius * 6 = 150(你现在远圆的关是)
  • 你叫middleCircle()这将与radius * 2 = 30为半径的圆。请注意,局部变量radius的方式也是15
  • ...

所以,你的问题是,你在radius一个值传递,但你使用该值仅适用于drawSnowman移动乌龟,在任何的其他功能不会进一步下降。

+0

谢谢你的回答,帮助我完成课程是完美的。我被卷起来看着绘画作品,它让我分心,看不到自己的代码,看看究竟发生了什么。 –