0

私は本質的にタートルグラフィックスで構成されているpythonプログラムを持っています。それは基本的に、ユーザーに描画する四角形の数を尋ね、次に各四角形の後に、次を使用してカウンターに1を追加します。

counter=1
<drawing code here>
counter +=1

その後、正方形の数がユーザーが入力した量と等しいかどうかを確認したいと思いました。そうであれば、スクリプトの最後に移動して、それを言うようにしたいと思いました。やったような何か!! . しかし、バッチで慣れているgotoコマンドがPythonでサポートされていないため、スクリプトの特定の部分に移動する方法がわかりません(goto =スパゲッティコードを知っています)

簡単な回避策は、誰かが作成したモジュールをダウンロードして goto コマンドを Python にインポートし、バッチで使用するのと同じように使用することであることがわかりましたが、もしあればネイティブの Python ソリューションが欲しいです!

私の現在のコードは次のとおりです。

from turtle import *
import time
counter=1
color("red", "blue")
down()

user=int(raw_input('how many balls do you want?'))
counter +=1
if user===counter:

# solution goes here!

else:

for step in range(24):
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)

up()
goto(120,0)
down()


counter +=1
if user==counter:

#solution goes here!

else:

for step in range(24):
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)
        right(105)
        forward(100)

up()
goto(0,-50)
write("Done!")

time.sleep(5) 

この問題に対する答えまたは代替案があれば、大歓迎です!

4

4 に答える 4

3

これは役に立ちますか?

import turtle   # don't pollute the namespace
import time

def getInt(msg):
    return int(raw_input(msg))

def drawBall():
    turtle.down()
    for i in range(96):
        turtle.right(105)
        turtle.forward(100)
    turtle.up()

def moveOver():
    turtle.goto(120,0)

def Done():
    turtle.goto(0,-50)
    turtle.write('Done!')
    time.sleep(5)

def main(): 
    turtle.color('red','blue')
    for i in range(getInt('How many balls do you want?')):
        drawBall()
        moveOver()
    Done()

if __name__=="__main__":
    main()

1 つの長い指示リストの観点から考えないでください。代わりに、問題を「ボールを描く」などの小さなアクションに分割し、それらの各アクションを手順として記述することを考えてください。次に、これらの手順を組み合わせて目標を達成する方法を考えてください。同じコードを繰り返し書いているということは、それが間違っているというサインです。

于 2010-12-14T20:38:46.120 に答える
2

正方形の数をチェックしてから最後に行くのではなく、代わりに適切な回数だけループして、毎回正方形を描きます。

于 2010-12-14T19:40:16.547 に答える
0

コードを関数に分解し、関数returnの残りのコードをスキップしたい場合はいつでも使用してください。

更新:コメンターが明らかに想定していたように、関数の複数の出口点を必ずしも容認しているわけではありません。この回答は、質問のコンテキストにあります。複数の出口の問題に関する私の意見は、Tim Peters の意見と一致します。

ええと、シングル エグジットは常にインストルメンテーションを容易にし、多くの場合推論を容易にするため、最適です (代わりに非常に多くの間抜けなブール値フラグが導入されるまでは、それらを追跡することは病気よりも悪いことです)。

于 2010-12-15T00:21:47.827 に答える
0

いくつかのヒント:

>>> def square():
    print "+--+"
    print "|  |"
    print "|  |"
    print "+--+"
    print


>>> range(5)
[0, 1, 2, 3, 4]
>>> for x in range(5):
    print x
    square()


0
+--+
|  |
|  |
+--+

1
+--+
|  |

[をちょきちょきと切る]

于 2010-12-14T19:49:14.017 に答える