簡體   English   中英

Python簡單烏龜程序

[英]Python simple turtle progam

我在嘗試完成python龜程序時遇到了麻煩。 當我嘗試輸入x和y坐標以及函數的半徑值(如t.drawSnowman(x = 25,y = 25,radius = 25)時,程序在輸入值時行為不正常。但是如果我省略參數以上,而只是使用t.drawSnowman()程序按預期工作,但我無法創建雪人的各種實例。

我真的很想幫助試圖找出如何輸入參數並仍然具有程序功能。

這是我的代碼

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 radius = 25)時,這是雪人的照片 搞砸了雪人

當我輸入沒有參數時,這是雪人t.drawsnowman() 正確的雪人

嘗試一步一步地找出代碼實際執行的操作(或使用調試器)。

  • 如果你調用t.drawSnowman() ,則radius 15
  • 你調用bottomCircle() ,它將繪制一個半徑為radius * 3 = 45的圓
  • 你在y軸上移動radius * 6 = 90 (你現在在圓圈的“頂部”
  • 你調用middleCircle() ,它將是一個半徑為radius * 2 = 30的圓
  • ...

現在,看看如果使用參數調用函數會發生什么:

  • 如果你調用t.drawSnowman(x = 25,y = 25,radius = 25) ,則radius 25
  • 你調用bottomCircle() ,它將繪制一個半徑為radius * 3 = 45的圓。 請注意局部變量radius15 ,因為它是該參數的默認值,並且您不將傳遞給drawSnowman的值傳遞給bottomCircle方法。
  • 你在y軸上移動radius * 6 = 150 (你現在遠離圓圈)
  • 你調用middleCircle() ,它將是一個半徑為radius * 2 = 30的圓。 注意局部變量radius也是15
  • ...

所以,你的問題是傳入一個radius的值,但你只使用該值來移動drawSnowman的烏龜,而不是在任何其他函數中進一步向下移動烏龜。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM