我的错误/故障在哪里?

2024-09-28 22:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用python和turtles画美国国旗,结果在代码中迷失了方向,找不到错误。我也不知道怎么给我的国旗上色。。。我以为有用的不是。。。我做了一些事情,现在我的代码在一半的时候崩溃了。。。请帮帮我,我是编程新手。。。你知道吗

这是我目前的密码。你知道吗

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.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('yellow')
    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()


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 # closes turtle window

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)

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

Tags: therightifdeffilllengthcolorrow
0条回答
网友
1楼 · 发布于 2024-09-28 22:21:38

我相信你有所有的关键部件。您主要需要考虑相对于大小和起始位置,而不是硬编码值,并保持简单。(例如color("blue")而不是color(r, s, t),直到你把事情做好。)好好看看国旗上的星星排列。你知道吗

我已经按照上面的注释重新编写了您的代码,并做了一些样式更改:

import turtle

X_POSITION, Y_POSITION = -150, 150

def draw_rectangle(length, height):
    turtle.up()

    C = height * (7 / 13.0)
    D = length * (2 / 5.0)
    L = height * (1 / 13.0)

    ## Draw rectangle first.

    turtle.setpos(X_POSITION, Y_POSITION)

    turtle.down()

    turtle.forward(length)
    turtle.right(90)
    turtle.forward(height)
    turtle.right(90)
    turtle.forward(length)
    turtle.right(90)
    turtle.forward(height)

    ## Then draw the red stripes.

    x, y = X_POSITION, Y_POSITION - L

    turtle.color("red")

    for z in range(0, 13, 2):
        turtle.up()

        turtle.setpos(x, y)
        turtle.setheading(90)

        turtle.down()

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

        y -= 2 * L

    ## Draw the stars rectangle overlapping the stripes

    turtle.up()

    turtle.color('blue')
    turtle.setpos(X_POSITION + D, Y_POSITION - C)

    turtle.down()

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

    ## next is stars

    turtle.up()

    draw_stars(D, C)

    turtle.up()

    ## This gets the turtle pen out of the way at the very end.
    turtle.hideturtle()

def draw_stars(length, height):
    row = height // 9
    row_offset = row / 2.0
    column = length // 6
    column_offset = column / 2.0

    y_position = row_offset

    for z in range(9):
        if z % 2 == 0:
            draw_starrows(6, column_offset, y_position, column)
        else:
            draw_starrows(5, column, y_position, column)

        y_position += row

def draw_starrows(star_count, x_offset, y_offset, spacing):
    x, y = X_POSITION, Y_POSITION

    turtle.color("white")

    for z in range(star_count):
        turtle.up()

        turtle.setpos(x + x_offset, y - y_offset)
        turtle.begin_fill()

        turtle.down()

        for _ in range(5):
            turtle.forward(6.154)
            turtle.left(144)

        turtle.end_fill()

        x += spacing

def draw_flag(height):
    turtle.speed("fastest")
    draw_rectangle(height * 1.9, height)

draw_flag(200)

turtle.done()

enter image description here

虽然缩放现在基本上可以工作(试试draw_flag(100)),但是星星本身(顺便说一句,你在上面做得很好)的大小仍然是固定的,所以你需要回去缩放它们以匹配标志的其余部分:

enter image description here

相关问题 更多 >