2013-04-01 71 views
1

我需要寫一個函數,根據人們想要多少星星的問題繪製隨機星星。 a =顏色,b =長度和c,d是起始座標。我不確定我要去哪裏錯誤的任何提示,提示或幫助,將不勝感激。繪製星星與蟒蛇中的龜

import turtle 
from random import* 
def star(a,b,c,d): 
    x=5 
    y=0 
    turtle.color(a) 
    turtle.begin_fill() 
    turtle.penup() 
    turtle.goto(c,d) 
    turtle.pendown() 
    while x>0: 
     turtle.forward(b) 
     turtle.right(144) 
     turtle.forward(b) 
     x-=1 
    turtle.end_fill() 

star('red',100,0,0) 

def random_color(): 
    randvar=randrange(0,5) 
    if randvar==0: 
     return ('red') 
    elif randvar==1: 
     return ('blue') 
    elif randvar==2: 
     return ('green') 
    elif randvar==3: 
     return ('yellow') 
    else: 
     return ('black') 

def length(): 
    randvar=randrange(5,71) 

def x(): 
    randvar=randrange(-280,281) 

def y(): 
    randvar=randrange(-200,201) 

def night_sky(): 
    z=int(input('How many stars do you want?')) 
    a=random_color 
    b=length 
    c=x 
    d=y 
    while z>0: 
     star(a,b,c,d) 
     z-=1 
+0

嘿,通常人們會欣賞更專注的問題。你應該告訴我們什麼是你的程序出來的,你期望什麼出來。當你分享代碼時,確保你只是分享盡可能多的代碼來解釋發生了什麼問題。 – Crisfole

+0

添加到此問題的好處可能是它產生的圖片(或者代碼拋出的錯誤或異常) –

+0

同上這些註釋。然而,非常感謝您(1)實際上已經嘗試編寫該程序,而不是僅僅要求其他人這樣做,並且(2)將代碼包含在您的問題中。許多求職者(新事物並不那麼新)不做這些事情。 +1。 – iamnotmaynard

回答

3

要調用函數,把括號函數名後:

a=random_color() 
    b=length() 
    c=x() 
    d=y() 

確保你在腳本的末尾調用night_sky()。目前,只有

star('red',100,0,0) 

被調用。這就是爲什麼你只看到一顆星星。


功能lengthxy需要使用return。否則,默認返回None

def length(): 
    return randrange(5,71) 

def x(): 
    return randrange(-280,281) 

def y(): 
    return randrange(-200,201) 

您需要將定義abc,並dwhile -loop的陳述,以免同一顆恆星被繪製z倍。雖然我們是在它的while -loop可以更簡單地寫成for -loop:

for i in range(z): 
     a=random_color() 
     b=length() 
     c=x() 
     d=y() 
     star(a,b,c,d) 

你的代碼,如果你使用更具描述性的變量名會變得更加自我說明:

def star(color, side_length, x, y): 
    print(color, side_length, x, y) 
    turtle.color(color) 
    turtle.begin_fill() 
    turtle.penup() 
    turtle.goto(x, y) 
    turtle.pendown() 
    for i in range(5): 
     turtle.forward(side_length) 
     turtle.right(144) 
     turtle.forward(side_length) 
    turtle.end_fill() 

所以這些變化,代碼變爲:

import turtle 
import random 

def star(color, side_length, x, y): 
    print(color, side_length, x, y) 
    turtle.color(color) 
    turtle.begin_fill() 
    turtle.penup() 
    turtle.goto(x, y) 
    turtle.pendown() 
    for i in range(5): 
     turtle.forward(side_length) 
     turtle.right(144) 
     turtle.forward(side_length) 
    turtle.end_fill() 


def random_color(): 
    randvar = randrange(0, 5) 
    if randvar == 0: 
     return ('red') 
    elif randvar == 1: 
     return ('blue') 
    elif randvar == 2: 
     return ('green') 
    elif randvar == 3: 
     return ('yellow') 
    else: 
     return ('black') 


def length(): 
    return random.randrange(5, 71) 


def xcoord(): 
    return random.randrange(-280, 281) 


def ycoord(): 
    return random.randrange(-200, 201) 


def night_sky(): 
    z = int(input('How many stars do you want?')) 
    for i in range(z): 
     color = random_color() 
     side_length = length() 
     x = xcoord() 
     y = ycoord() 
     star(color, side_length, x, y) 

night_sky() 
+0

這些都是有效的點(因爲我相信你知道你的SO得分)。但是運行該程序(通過將源複製到IDEL中),代碼繪製了一個明星(雖然沒有問)。烏龜似乎願意爲它的輸入採取功能 –

+0

這是非常有用的謝謝@unutbu –

+0

@JasonSperske:單星受到'star'('red',100,0,0)'語句的吸引。注意這些參數不是函數對象。如果你嘗試調用'night_sky()'而不在'a','b','c'和'd'的定義中使用圓括號,那麼你會得到錯誤。 Python將函數當作第一類對象......可以作爲參數傳遞,但它們的含義與您在添加括號時得到的返回值完全不同。 – unutbu