2013-04-01 72 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