<p>在解决这样的问题时,我建议如下:</p>
<ul>
<li><p>如果需要的话,在纸上仔细计划你的方块字体。这个
设计越简单,编写代码就越容易。</p></li>
<li><p>在代码中逻辑地分离字母——如果不是函数的话
在这一点上,至少分成单独的注释块。</p></li>
<li><p>让每个字母以乌龟指向同一方向开始
并根据需要进行调整,不要指望前一个
信。</p></li>
<li><p>使用虚拟坐标系简化绘图逻辑和
允许字母出现在不同大小的窗口中。如果没有
函数类似于<code>setworldcoordinates()</code>,然后简单地通过乘法器
高度和宽度。</p></li>
<li><p>在你的设计中假设你想在以后添加更多的字母。</p></li>
<li><p>想想如果你想拼“DIAN”会发生什么--
您需要更改多少代码,以及如何将其保留为
最少。</p></li>
</ul>
<p>我下面的示例使用了您可能还没有学习过的功能,并不是要作为解决方案供您使用——而是要说明上面的想法。一、 e.尝试更改窗口大小、边框大小、宽度和高度、重新排列删除项等,并查看结果如何更改但仍然有效:</p>
<pre><code>from turtle import Turtle, Screen
NAME = "IDAN"
BORDER = 1
BOX_WIDTH, BOX_HEIGHT = 6, 10 # letter bounding box
WIDTH, HEIGHT = BOX_WIDTH - BORDER * 2, BOX_HEIGHT - BORDER * 2 # letter size
def letter_A(turtle):
turtle.forward(HEIGHT / 2)
for _ in range(3):
turtle.forward(HEIGHT / 2)
turtle.right(90)
turtle.forward(WIDTH)
turtle.right(90)
turtle.forward(HEIGHT)
def letter_D(turtle):
turtle.forward(HEIGHT)
turtle.right(90)
turtle.circle(-HEIGHT / 2, 180, 30)
def letter_I(turtle):
turtle.right(90)
turtle.forward(WIDTH)
turtle.backward(WIDTH / 2)
turtle.left(90)
turtle.forward(HEIGHT)
turtle.right(90)
turtle.backward(WIDTH / 2)
turtle.forward(WIDTH)
def letter_N(turtle):
turtle.forward(HEIGHT)
turtle.goto(turtle.xcor() + WIDTH, BORDER)
turtle.forward(HEIGHT)
LETTERS = {'A': letter_A, 'D': letter_D, 'I': letter_I, 'N': letter_N}
wn = Screen()
wn.setup(800, 400) # arbitrary
wn.title("Turtle writing my name: {}".format(NAME))
wn.setworldcoordinates(0, 0, BOX_WIDTH * len(NAME), BOX_HEIGHT)
marker = Turtle()
for counter, letter in enumerate(NAME):
marker.penup()
marker.goto(counter * BOX_WIDTH + BORDER, BORDER)
marker.setheading(90)
if letter in LETTERS:
marker.pendown()
LETTERS[letter](marker)
marker.hideturtle()
wn.mainloop()
</code></pre>
<p><strong>输出</strong></p>
<p><a href="https://i.stack.imgur.com/Ww2AW.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Ww2AW.png" alt="enter image description here"/></a></p>