2015-10-15 101 views
0

我很難搞清楚如何創建一個函數,根據用戶輸入繪製大寫的I。如果用戶輸入爲1,則繪製一個I,如果它是2,則繪製2個I,如下所示。Python龜:遞歸函數

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

很抱歉,但我們不打算做所有的工作適合你。我們可能會給你一些指示,你必須編寫代碼,然後顯示你做了什麼,我們將發表評論。第一個指針:編寫一個單獨的函數,它將一組座標作爲原點(箭頭所在的位置)和一個縮放級別(可能是一個浮點數,默認爲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 

您也可以使代碼一點點使用的「我」的兩半,酒吧雙方迴路短。