我刚开始在python中学习龟。 我试着写下我的名字“Idan”(大写字母),但我被困在“D”上。
到目前为止,这是我的代码:
BORN_STATE
但是当我跑它时它会给我一个小半圈。
有没有办法让它做半圈,创造一个“D”
答案 0 :(得分:0)
你遇到的主要问题是,当乌龟面朝上而不是右边时,你的半圈会开始。在t.right(90)
循环之前添加for
来电,您将更接近您想要的内容(您将获得P
之类的内容。)
之后,您需要调整循环内的forward
次调用以使圆圈符合您想要的大小(或在评论中建议为martineau,使用{{1}而不是你自己的循环)。您可能需要进行一些计算以确定正确的距离(例如,将所需直径乘以t.circle
得到一个周长,然后除以您用来构建它的段数。)
答案 1 :(得分:0)
不完美,通过尝试和错误制作,但它写下了名字:
import turtle
turtle.setup(900,400)
wn = turtle.Screen()
wn.title("Turtle writing my name: IDAN")
wn.bgcolor("lightgreen")
turtle.width(30)
# turtle.pensize(30)
t = turtle.Turtle()
t.up()
t.backward(360)
t.left(90)
t.backward(80)
t.down()
t.forward(250)
t.right(90)
t.forward(62.5)
t.backward(62.5 * 2)
t.forward(62.5)
t.right(90)
t.forward(250)
t.right(90)
t.forward(62.5)
t.backward(62.5 * 2)
t.up()
t.backward(100)
t.right(90)
t.down()
t.forward(250)
t.right(90)
for x in range(180):
. t.forward(2.2) # adjust HERE to get different size of circle
t.right(1)
t.up()
t.right(90)
t.forward(230)
t.right(90)
t.forward(4*62.5)
t.right(65)
t.down()
t.forward(250)
t.right(180)
t.forward(275)
t.left(135)
t.forward(250)
t.right(180)
t.forward(120)
t.right(70)
t.forward(110)
t.right(90)
t.up()
t.forward(115)
t.left(90)
t.forward(1.5*62.5)
t.left(90)
t.down()
t.forward(250)
t.right(145)
t.forward(320)
t.left(145)
t.forward(250)
wn.mainloop()
答案 2 :(得分:0)
我会在解决这样的问题时提出以下建议:
如果需要,请在纸上小心地计划您的块字体。该 设计越简单,编码就越容易。
在您的代码中逻辑分隔您的字母 - 如果不是函数 在这一点上,至少在单独的评论块中。
让每个字母都以指向同一方向的乌龟开始 并根据需要进行调整,不要依赖前一个的结果状态 信。
使用虚拟坐标系统简化绘图逻辑和
允许字母出现在不同大小的窗口中。如果没有
像setworldcoordinates()
这样的函数,然后简单地通过乘数来实现
高度和宽度。
在您的设计中假设您以后想要添加更多字母。
想一想如果你想要拼写" DIAN"会发生什么?相反 - 你需要改变多少代码,你怎么能保持这个代码 最小。
下面我的示例使用了您可能尚未学习的功能,并不是您可以使用的解决方案 - 它旨在说明上述想法。即尝试更改窗口大小,边框大小,宽度和高度,重新排列列表等,并查看结果如何更改但仍然有效:
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()
<强>输出强>
答案 3 :(得分:0)
您可以改用此代码:`
import turtle
turtle = turtle. Turtle()
turtle.write("IDAN" ,font=("Arial",32,"normal")
答案 4 :(得分:0)
这可能有效: 它对我有用
import turtle as t
def letterD():
t.pendown()
t.setheading(90)
t.forward(108)
t.setheading(0)
for i in range(4):
t.forward(20)
t.right(30)
t.setheading(-90)
t.forward(13)
for i in range(4):
t.forward(20)
t.right(30)
t.setheading(0)
t.penup()
t.forward(65)
答案 5 :(得分:0)
示例:
import turtle
t = turtle.Pen()
t.circle(50, 180)
# this draws a 180 degree, 50 radius circle
答案 6 :(得分:-1)
我使用 Google Colab 所以这是该程序的代码
!pip3 安装 ColabTurtle
将 ColabTurtle.Turtle 导入为 l
l.initializeTurtle()
l.width(6)
l.penup()
l.right(270)
l.forward(300)
l.right(180)
l.forward(100)
l.left(180)
l.pendown()
l.forward(100)
l.right(90)
l.forward(150)
l.penup()
l.right(90)
l.forward(130)
l.pendown()
l.right(90)
l.forward(150)
l.left(90)
l.forward(100)
l.left(90)
l.forward(150)
l.penup()
l.right(90)
l.forward(30)
l.right(45)
l.pendown()
l.forward(200)
l.penup()
l.left(45)
l.left(90)
l.forward(150)
l.left(90)
l.left(45)
l.pendown()
l.forward(200)
l.penup()
l.left(45)
l.left(90)
l.forward(200)
l.left(90)