刚刚开始学习python。我正在尝试通过turtle模块绘制这种图案,不仅是这种图案,而且在应用循环绘制任何类型的图案时也遇到了麻烦(特别是当涉及到彼此内部形状不同的图案时,我只是简单地不知道从哪里开始以及如何组织功能来绘制类似的复杂模式。因此,我通常会一步一步地了解到应该有一个循环使乌龟重新做同样的事情。无论如何,这是我要绘制的图案:pattern这是我到目前为止所拥有的:
import turtle
wn = turtle.Screen()
t = turtle.Turtle()
def pattern(t,clr):
t.screen.bgcolor("white")
t.pensize(10)
for i in range(2):
t.pd()
t.fd(100) ##
t.rt(90)
t.fd(100) ##
t.rt(90)
t.fd(90) ##
t.rt(90)
t.fd(75) ##
t.rt(90)
t.fd(70) ##
t.rt(90)
t.fd(38) ##
t.rt(90)
t.fd(38) ##
t.pu()
t.lt(90)
t.fd(77)
t.pd()
t.lt(90)
t.fd(38)
t.rt(90)
t.fd(38)
t.rt(90)
t.fd(70)
t.rt(90)
t.fd(75)
t.rt(90)
t.fd(90)
t.rt(90)
t.fd(100)
t.rt(90)
t.fd(100)
pattern(t,"black")
任何提示和建议将不胜感激!谢谢!
[查看原始图像以及程序的输出,您似乎专注于白色背景上的黑线,而没有注意到这可以看作是黑色背景上的白线。即,笔触的宽度与笔划之间的间隙的宽度匹配。让我们首先简单地在图像上覆盖一个网格:
现在我们可以使用任意大小的网格块按照网格块描述图像。这是根据网格块重写的程序:
from turtle import Screen, Turtle
BLOCK = 15
def pattern(turtle):
turtle.pensize(BLOCK)
for _ in range(2):
turtle.pd()
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 5)
turtle.rt(90)
turtle.fd(BLOCK * 4)
turtle.rt(90)
turtle.fd(BLOCK * 3)
turtle.rt(90)
turtle.fd(BLOCK * 2)
turtle.rt(90)
turtle.fd(BLOCK * 1)
turtle.pu()
turtle.lt(90)
turtle.fd(BLOCK * 4)
turtle.lt(90)
turtle.pd()
turtle.fd(BLOCK * 1)
turtle.rt(90)
turtle.fd(BLOCK * 2)
turtle.rt(90)
turtle.fd(BLOCK * 3)
turtle.rt(90)
turtle.fd(BLOCK * 4)
turtle.rt(90)
turtle.fd(BLOCK * 5)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle.rt(90)
turtle.fd(BLOCK * 6)
turtle = Turtle()
pattern(turtle)
screen = Screen()
screen.exitonclick()
通过查看此修改后的代码和图像,您是否知道可以使用循环在哪里合并代码?