2017-03-25 5 views
0

letterXという名前の関数を作成するPythonプログラムを作成するだけで、Xが作成されます。この2つの行は互いに90度でなければなりません。ポインタは初期位置で終了します。タートルX描画の簡素化

これを非常に簡単に解決しました。これをループに入れることができるのか、それとも単純化することができるのだろうかと思います。私は、同じコードをループするのではなく、違った方向に変更する必要があるので、私はどうしたらいいのか分かりません。どんな助けもありがとう。

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) 

答えて

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() 

をあなたはスピードを探している、と本当に不可解なコードしている場合は、スタンプを検討:

を0
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) 
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)