2015-10-15 3 views
0

У меня возникли проблемы с выяснением того, как создать функцию, которая рисует капитал I на основе пользовательского ввода. Если пользовательский ввод равен 1, он рисует один I, если он равен 2, он рисует 2 I, в этом примере, показанном ниже.Python Turtle: Рекурсивная функция

enter image description here

я могу вручную сделать первые 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) 
+0

Извините, но мы не будем делать всю работу за вас. Мы могли бы дать вам несколько указателей, и вы должны написать код, а затем показать, что вы сделали, и мы будем комментировать. Первый указатель: Напишите отдельную функцию, которая принимает набор координат в качестве источника (где стрелка) и уровень масштабирования (возможно, float, по умолчанию - 1.0) в качестве аргументов и рисует структуру уровня 1, основанную на аргументе. –

ответ

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) 

enter image description here

0

Если вы хотите сделать это рекурсивно, вам нужно снова вызвать функцию с различными параметрами, например. при этом «уровень» меньше одного, а удары составляют лишь половину длины. Удостоверьтесь, что черепаха находится в одном и том же месте и находится в одном направлении в начале и в конце метода, а затем просто вызовите функцию снова, когда вы находитесь в углах.

Вот несколько псевдо-кода

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 

Вы также можете сделать код немного короче, используя петлю для двух половин «я» и с двух сторон панели.