在乌龟画信

时间:2017-04-28 21:52:15

标签: python python-2.7 turtle-graphics

我刚开始在python中学习龟。 我试着写下我的名字“Idan”(大写字母),但我被困在“D”上。

到目前为止,这是我的代码:

BORN_STATE

但是当我跑它时它会给我一个小半圈。

有没有办法让它做半圈,创造一个“D”

7 个答案:

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

<强>输出

enter image description here

答案 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)

输出 enter image description here