0

我在 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、颜色)

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

哦,我无法解决的另一件事是为什么当你运行程序时我的图形窗口没有关闭,我在适当的地方使用了 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)
4

2 回答 2

1

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

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

red, green, blue = get_color()

您可以将多个返回值传递给这样的函数:

turtle.color(*get_color())

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

于 2012-10-08T14:13:47.843 回答
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()

我希望它有所帮助。

于 2012-10-08T16:14:34.207 回答