Turtle X 绘图简化

Turtle X drawing simplification

只需创建一个 python 程序,该程序创建一个名为 letterX 的函数,该函数...很好地构成了一个 X。两条线必须彼此成 90 度角。指针在初始位置结束。

我很容易地解决了这个问题,只是想知道您是否可以将其放入一个循环中或者只是简化它。我不知道如何,因为我必须以不同的方式改变方向而不是循环相同的代码。任何帮助将不胜感激。

import turtle
t = turtle.Turtle()
s = turtle.Screen()

def letterX(t,length):
    t.down()
    t.right(45)
    t.forward(length/2)
    t.right(180)
    t.forward(length)
    t.right(180)
    t.forward(length/2)
    t.left(90)
    t.forward(length/2)
    t.right(180)
    t.forward(length)
    t.right(180)
    t.forward(length/2)
    t.right(45)
    t.up()
letterX(t,100)

就我个人而言,我将 turtle 效率衡量为最小化绘图 -- 你的 turtle 正在重新绘制它已经绘制的东西,所以让我们优化它:

def letterX(t, length):

    half_length = length / 2
    hypotenuse = (2 * half_length**2)**0.5

    t.pendown()
    t.right(45)
    t.forward(half_length)
    t.left(135)

    t.penup()
    t.forward(hypotenuse)
    t.pendown()

    t.left(135)
    t.forward(length)
    t.right(135)

    t.penup()
    t.forward(hypotenuse)
    t.pendown()

    t.right(135)
    t.forward(half_length)
    t.left(45)
    t.penup()

但是,如果您真的想要最少的代码和一个循环,请考虑:

def letterX(t, length):

    for angle in range(-135, 136, 90):
        mock = t.clone()
        mock.left(angle)
        mock.forward(length / 2)
        mock.hideturtle()

如果您正在寻找速度和真正神秘的代码,请考虑戳记:

def letterX(t, length):

    t.shapesize(length / 10, 1 / 10)  # assuming default turtle image

    for angle in range(-45, 91, 135):
        t.tilt(angle)
        t.stamp()

    t.tilt(-45)
    t.shapesize(1)

关键是找出可重复的单位。由于您希望在所有单位后恢复海龟,因此最简单的方法是在每个单位后恢复它。

import turtle
t = turtle.Turtle()
s = turtle.Screen()

def line(t, length, angle):
    half = length/2
    t.left(angle)
    t.forward(half)
    t.right(180)
    t.down()
    t.forward(length)
    t.up()
    t.right(180)
    t.forward(half)
    t.right(angle)

def letterX(t,length):
    for angle in (45, 135):
        line(t, length, angle)

letterX(t,100)