0

コーディングに問題があります。私は再帰を学んでおり、これまでのところかなり楽しい時間を過ごしています。python turtle グラフィック モジュールを使用して、基本的なタートルの描画から始めました。画像のコードを書き留めましたが、深度に基づいて亀のペンの色を変更することも想定されています。私の教授は、これを達成するために mod (%) について簡単に触れただけでしたが、私はどこから始めればよいのかわからず、何らかの支援を期待していました. 前もって感謝します。担当者が十分に高くないため、写真を追加できませんが、基本的にコードを実行すると、「S」の数字が描画されます。最初の「S」は緑、2 番目の 2 つは赤、3 番目の 3 つは緑などです。コードは次のとおりです。

from turtle import *

def drawzig2(depth,size):
    if depth == 0:
        pass
    elif depth:
        left(90)
        fd(size/2)
        right(90)
        fd(size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(-size)
        left(90)
        fd(-size)
        right(90)
        fd(-size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(size)
        left(90)
        fd(size/2)
        right(90)

drawzig2(4,100)
4

2 に答える 2

0

ご指摘のとおり、@xfx による解決策は、再帰に関して色を正しく処理しないため、意図せずに色を設定してから設定を解除します。これは、ルーチンへの入り口で現在の色を追跡し (計算することもできます)、終了時にそれを復元する小さな変更です。このように、再帰呼び出しが色に対して何をするかを心配する必要はありません。見つけたままにしておく必要があります。

from turtle import Turtle, Screen

colors = ['green', 'red']

def drawzig2(turtle, depth, size):

    if depth == 0:
        return

    color = turtle.pencolor()

    turtle.pencolor(colors[depth % len(colors)])

    turtle.left(90)
    turtle.fd(size / 2)
    turtle.right(90)
    turtle.fd(size)
    turtle.left(45)

    drawzig2(turtle, depth - 1, size / 2)

    turtle.right(45)
    turtle.bk(size)
    turtle.left(90)
    turtle.bk(size)
    turtle.right(90)
    turtle.bk(size)
    turtle.left(45)

    drawzig2(turtle, depth - 1, size / 2)

    turtle.right(45)
    turtle.fd(size)
    turtle.left(90)
    turtle.fd(size / 2)
    turtle.right(90)

    turtle.pencolor(color)

yertle = Turtle()

drawzig2(yertle, 4, 100)

screen = Screen()

screen.exitonclick()

出力

ここに画像の説明を入力

于 2016-12-08T06:52:57.750 に答える
0

これを試して。

from turtle import *

colors = ['green', 'red']

def drawzig2(depth,size):

    if depth == 0:
        pass
    elif depth:
        pencolor(colors[depth % len(colors)])
        left(90)
        fd(size/2)
        right(90)
        fd(size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(-size)
        left(90)
        fd(-size)
        right(90)
        fd(-size)
        left(45)
        drawzig2(depth-1,size/2)
        right(45)
        fd(size)
        left(90)
        fd(size/2)
        right(90)

drawzig2(4,100)
于 2013-09-14T04:25:33.183 に答える