龟X绘图简化

时间:2017-03-25 20:09:59

标签: python turtle-graphics

只需创建一个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)

2 个答案:

答案 0 :(得分:0)

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

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)

答案 1 :(得分:0)

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

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)