【问题标题】:Python Turtle: Recursive functionPython Turtle:递归函数
【发布时间】:2015-10-15 09:27:33
【问题描述】:

我无法弄清楚如何创建一个根据用户输入绘制大写字母 I 的函数。如果用户输入为 1,则绘制一个 I,如果为 2,则绘制 2 个 I,如下图所示。

我可以通过使用简单的海龟方法手动完成前 2 个级别,但是您如何递归地执行此操作以便它会为更高级别执行此操作?

def my_turtle_function(n):
    my_win = turtle.Screen()
    my_turtle = turtle.Turtle()
    my_turtle.speed(2)
    my_turtle.left(90)
    if n == 1:
        my_turtle.forward(100)
        my_turtle.right(90)
        my_turtle.forward(100)
        my_turtle.forward(-200)
        my_turtle.forward(100)
        my_turtle.right(90)
        my_turtle.forward(200)
        my_turtle.right(90)
        my_turtle.forward(100)
        my_turtle.forward(-200)
        my_turtle.forward(100)
        my_turtle.right(90)
        my_turtle.forward(100)

【问题讨论】:

  • 抱歉,我们不会为您完成所有工作。我们可能会给你一些指导,你必须编写代码,然后展示你做了什么,我们会评论。第一个指针:编写一个单独的函数,以一组坐标作为原点(箭头所在的位置)和缩放级别(可能是浮点数,默认为 1.0)作为参数,并根据参数绘制级别 1 结构。跨度>

标签: python turtle-graphics


【解决方案1】:
import turtle


def move_me(trt, step, n):
    while n > 0:
        tmp = trt.heading()
        trt.lt(90)
        trt.fd(step)
        trt.rt(90)
        trt.fd(step)
        move_me(trt, step / 2, n - 1)
        trt.fd(-2 * step)
        move_me(trt, step / 2, n - 1)
        trt.fd(step)
        trt.rt(90)
        trt.fd(2 * step)
        trt.rt(90)
        trt.fd(step)
        move_me(trt, step / 2, n - 1)
        trt.fd(-2 * step)
        move_me(trt, step / 2, n - 1)
        trt.fd(step)
        trt.rt(90)
        trt.fd(step)
        n -= 1
        trt.seth(tmp)

my_win = turtle.Screen()
my_turtle = turtle.Turtle()
my_turtle.speed(10)
move_me(my_turtle, 200, 3)

【讨论】:

    【解决方案2】:

    如果你想递归地做,你必须再次调用函数,使用不同的参数,例如“水平”小一,笔画只有一半。确保海龟在方法的开始和结束时在同一个位置并朝向同一个方向,然后在拐角处再次调用该函数。

    这是一些伪代码

    def my_turtle_function(t, length, n):
        if n > 0:
            move up and left by length, face north
            call my_turtle_function(t, length/2, n-1)
            move right, right by length, face north
            call my_turtle_function(t, length/2, n-1)
            move left, down, down, left by length, face north
            call my_turtle_function(t, length/2, n-1)
            move right, right by length, face north
            call my_turtle_function(t, length/2, n-1)
            move back to starting point
    

    您还可以通过对“I”的两半和条形的两侧使用循环来使代码更短。

    【讨论】:

      猜你喜欢
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-06
      • 2017-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      相关资源
      最近更新 更多