在Python中嵌入函数

时间:2012-10-08 12:54:36

标签: python function turtle-graphics

我使用Python 3中的Turtle Graphics创建了一个程序,它绘制了美国国旗:

import turtle
import time
import random

def draw_rectangle(length, height):
    turtle.up()
    x = -150
    y = 150
    C = height*(7/13)
    D = length*(2/5)
    L = stripe_width = float(round(height/13,1))

    ## Draw rectangle first.
    turtle.color(0,0,0)
    turtle.begin_fill()
    turtle.setpos(x,y)
    turtle.down()
    turtle.forward(length)
    turtle.right(90)
    turtle.forward(height)
    turtle.right(90)
    turtle.forward(length)
    turtle.right(90)
    turtle.forward(height)
    turtle.end_fill()

    ## Then draw the stripes.
    x1 = -150
    y1 = 150-L
    for z in range(13):
        if z%2 == 0:
            r = s = t = 0
        else:
            r = s = t = 1
        turtle.up()
        turtle.speed(100)
        turtle.setpos(x1,y1)
        turtle.setheading(90)
        turtle.down()
        turtle.color(r,s,t)
        turtle.begin_fill()
        turtle.forward(L)
        turtle.right(90)
        turtle.forward(length)
        turtle.right(90)
        turtle.forward(L)
        turtle.right(90)
        turtle.forward(length)
        turtle.end_fill()
        y1 -= L

    ## Finally draw the stars rectangle overlapping the stripes, next is stars.
    x2 = -150+D
    y2 = 150.5-C
    turtle.up()
    turtle.setpos(x2,y2)
    turtle.down()
    turtle.color(0,0,0)
    turtle.begin_fill()
    turtle.forward(D)
    turtle.right(90)
    turtle.forward(C)
    turtle.right(90)
    turtle.forward(D)
    turtle.right(90)
    turtle.forward(C)
    turtle.end_fill()
    turtle.up()

    turtle.bye
    draw_star(-length, height)

def draw_star(l, h):
    for z in range(50):
        if z < 7:
            row = 140
            draw_starrows(row)
        if z < 14:
            row = row - 20
            draw_starrows(row)
        if z < 21:
            row = row - 20
            draw_starrows(row)
        if z < 28:
            row = row - 20
            draw_starrows(row)
        if z < 35:
            row = row - 20
            draw_starrows(row)
            ## This gets the turtle pen out of the way at the very end.
            turtle.up()
            turtle.setpos(-180,100)
        break

def draw_starrows(row):
    x = -160
    y = 150
    for z in range(10):
        x += 15
        turtle.up()
        turtle.color(1,1,1)
        turtle.speed(100)
        turtle.setpos(x,row)
        turtle.begin_fill()
        turtle.down()
        turtle.forward(6.154)
        turtle.left(144)
        turtle.forward(6.154)
        turtle.left(144)
        turtle.forward(6.154)
        turtle.left(144)
        turtle.forward(6.154)
        turtle.left(144)
        turtle.forward(6.154)
        turtle.left(144)
        turtle.end_fill()
    turtle.bye

##def get_color():
##    r = g = b = 0
##    color = r = g = b
##    return color

def draw_flag():
    A = 200
    height = int(A)
##    length = height*1.9
##    C = height*(7/13)
##    D = length*(2/5)
##    E = F = union_height/10
##    G = H = union_length/12
##    stripe_width = height/13
##    diameter_star = stripe_width*(4/5)
    draw_rectangle(height*1.9, height)

draw_flag()

现在为了最后一步,我想用一个抓住上面颜色的函数def get_color(color)替换所有turtle.color(0,0,0)和(1,1,1),但是,我对如何做到这一点有点困惑。需要使用颜色功能的其他功能是:

draw_rectangle(长度,高度,颜色) draw_star(l,h,color)

我也不想使用任何全局变量。

哦,另外一件我无法解决的问题是为什么我的图形窗口在你运行程序时没有关闭,我在适当的地方使用了turtle.bye()(我认为),但我总是要手动关闭龟窗。

任何帮助都将不胜感激,谢谢。

2015年3月编辑:

这是更新的get_color解决方案:

def get_color(color2):
    ## If color2 equals 1, then make the color white.
    if color2 == 1:
        r = g = b = 1
        return (r, g, b)
    ## If color2 equals 0, then make the color red.
    if color2 == 0:
        r = 1
        g = 0
        b = 0
        return (r, g, b)
    ## If color2 equals 2, then make the color black.
    if color2 == 2:
        r = 0
        g = 0
        b = 1
        return (r, g, b)

2 个答案:

答案 0 :(得分:1)

您可以从函数返回多个值。

def get_color():
    r = g = b = 0
    return r, g, b

red, green, blue = get_color()

您可以将多个返回值传递给如下函数:

turtle.color(*get_color())

get_color()返回三个值,用作turtle.color的3个参数。

答案 1 :(得分:1)

1.我认为您不需要这样的功能,您可以非常简单地设置颜色(对于单个标志):

turtle.color("red")

turtle.color("#285087")

或你想要的任何颜色。

编辑:然后我认为应该如此:

def get_color(color):
    c = color
    return c

a = get_color("blue")

你可以像这样使用它:

turtle.color(a)

2.你的窗口没有关闭,因为它应该是:

turtle.bye()

或在您的代码中仅

turtle.bye

同样在你的代码中,turtle.bye会出现两次而且出现在错误的地方 - 你应该把它放在代码的末尾(至少,对我来说它是这样的):

draw_flag()
turtle.bye()

我希望它有所帮助。