0

これが完全に再利用に関連しているかどうかはわかりませんが、メイン関数内に小さな関数を追加して、整数以外の入力をブロックしました

def main(depth, size):
    depth = eval(input("Enter depth that is an integer: "))
    if (isinstance( depth, int)) == False:
        print( 'Not an integer' )
        main(depth, size)
    else:
        pass
    turtle.left(120)
    turtle.speed(100)
    triangle(depth, size)

def triangle(depth, size):
    if depth == 0:
        pass
    else:
        turtle.forward(size)
        triangle(depth-1, size/2)
        turtle.right(120)
        turtle.forward(size)
        turtle.left(120)
        triangle(depth-1, size/2)
        turtle.right(120)
        turtle.right(120)
        turtle.forward(size)
        turtle.right(120)

main(depth, 100)

整数を入力すると、プログラムは正常に実行されます。非整数を入力すると、戻り、整数ではないことが通知され、入力ステージに戻ります。次に、整数を入力すると、必要に応じて画像の描画が開始され、さらに少し進んで、「三角形(深さ-1、サイズ/ 2)」の27行目の再帰でハングアップします。

このプログラムの完成が近づいているので、クラッシュしにくくする必要があります。

4

1 に答える 1

1

深さが無制限であるため、ユーザー入力は (非テール) 再帰の良い候補ではありません。それを繰り返すだけです:

def main(size):
    while True:
        depth = input("Enter depth that is an integer: ")
        try:
            depth = int(depth)
        except ValueError:
            print('Not an integer')
        else:
            break

    turtle.left(120)
    turtle.speed(100)
    triangle(depth, size)
于 2013-09-14T23:27:09.730 に答える