python 如何在风筝填充颜色使用海龟

jfewjypa  于 2023-01-16  发布在  Python
关注(0)|答案(1)|浏览(159)

我试着用Python中的turtle创建一个风筝,我画得很对,但是它没有填充所有四个部分的颜色。
这是我的代码:

import turtle
turtle.fillcolor('orange')
turtle.begin_fill()
turtle.goto(0,100)
turtle.goto(-100,0)
turtle.goto(0,0)
turtle.end_fill()
turtle.fillcolor('pink')
turtle.begin_fill()
turtle.goto(100,0)
turtle.goto(0,100)
turtle.goto(0,-100)
turtle.end_fill()
turtle.fillcolor('black')
turtle.begin_fill()
turtle.goto(-100,0)
turtle.goto(0,-100)
turtle.goto(100,0)

turtle.fillcolor('green')
turtle.begin_fill()
turtle.goto(0,-100)
turtle.goto(0,-150)
turtle.goto(0,-100)
turtle.end_fill()
turtle.fillcolor('yellow')
turtle.begin_fill()
turtle.goto(50,-150)
turtle.goto(-50,-150)
turtle.goto(0,-100)
turtle.end_fill()
turtle.done()

我如何修复它以获得正确的填充?

9jyewag0

9jyewag01#

除了缺少与turtle.fillcolor('black')关联的end_fill之外,您的绘图是明智的,因为您已经通过移动到下一个起点来保存工作,但这会导致填充不完整。相反,请精确地确定每个填充形状的起点和终点。坚持在相同的位置开始和结束每个形状,以便完成填充,在本例中为(0,0)。
例如:

import turtle

t = turtle.Turtle()
t.fillcolor("orange")
t.begin_fill()
t.goto(0, 100)
t.goto(-100, 0)
t.goto(0, 0)
t.end_fill()

t.fillcolor("pink")
t.begin_fill()
t.goto(100, 0)
t.goto(0, 100)
t.goto(0, 0)
t.end_fill()

t.fillcolor("black")
t.begin_fill()
t.goto(-100, 0)
t.goto(0, -100)
t.goto(0, 0)
t.end_fill()

t.fillcolor("green")
t.begin_fill()
t.goto(100, 0)
t.goto(0, -100)
t.end_fill()

t.fillcolor("yellow")
t.begin_fill()
t.goto(50, -150)
t.goto(-50, -150)
t.goto(0, -100)
t.end_fill()

turtle.exitonclick()

现在,你可能会觉得这是重复的。100在代码中出现了很多次,每个三角形的绘制都遵循类似的逻辑。你可以使用一个循环并引入一个变量来节省工作量并泛化模式:

import turtle

t = turtle.Turtle()
colors = "orange", "pink", "black", "green"
d = 100

for color in colors:
    t.fillcolor(color)
    t.begin_fill()
    t.forward(d)
    t.left(135)

    # pythagorean theorem
    t.forward((d ** 2 + d ** 2) ** 0.5)

    t.left(135)
    t.forward(d)
    t.end_fill()
    t.left(180)

t.fillcolor("yellow")
t.goto(0, -d)
t.begin_fill()
t.goto(d / 2, -d * 1.5)
t.goto(-d / 2, -d * 1.5)
t.goto(0, -d)
t.end_fill()

turtle.exitonclick()

在泛化模式时,可以避免复制粘贴错误,例如忘记turtle.fillcolor('black')
其它方法也是可能的。

相关问题