0

Python 3でタートルグラフィックスを使用して、アメリカの国旗を描くプログラムを作成しました。

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()

最後のステップとして、すべてのturtle.color(0,0,0)と(1,1,1)を、上の色を取得する関数def get_color(color)に置き換えたいと思いますが、私はこれを行う方法について少し混乱しています。カラー関数を利用する必要がある他の関数は次のとおりです。

draw_rectangle(length、height、color)draw_star(l、h、color)

グローバル変数も使いたくない。

ああ、私が修正できないもう1つのことは、プログラムを実行したときにグラフィックウィンドウが閉じない理由です。適切な場所で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 つの引数として使用される 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 が 2 回表示され、間違った場所に表示されます。コードの最後に配置する必要があります (少なくとも、私にとってはこのように動作します)。

draw_flag()
turtle.bye()

お役に立てば幸いです。

于 2012-10-08T16:14:34.207 に答える