gotoコマンドに代わるpython?
-
10-10-2019 - |
質問
私はタートルグラフィックスで構成されたエッセンティリーであるPythonプログラムを持っています。基本的には、ユーザーに描画する正方形の数を尋ねています。そして、各正方形の後、次を使用してカウンターに1を追加します。
counter=1
<drawing code here>
counter +=1
そしてその後、正方形の数が入力した量に等しいかどうかを確認するためにチェックをしたかったのです。何かのようなもの 終わり!!. 。しかし、私がバッチで慣れていたgotoコマンドがpythonでサポートされていないので、私はそれをスクリプトの特定の部分に行く方法を知りません(私は知っています、goto = spaghettiコード)
簡単な回避策は、誰かが作成したモジュールをダウンロードするだけで、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)
この問題の答えや代替手段があれば、大歓迎です!
解決
これは助けますか?
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()
指示の長い単一のリストについては考えないでください。代わりに、問題を「ボールを描く」などの小さなアクションに分解し、それらの各アクションを手順として書くことを考えてください。次に、これらの手順に参加して目標を達成する方法を考えてください。同じコードを繰り返し書くことは、あなたがそれを間違っていることの兆候です。
他のヒント
正方形の数をチェックしないで、最後まで進み、代わりに適切な回数をループして、毎回正方形を描くだけです。
いくつかのヒント:
>>> def square():
print "+--+"
print "| |"
print "| |"
print "+--+"
print
>>> range(5)
[0, 1, 2, 3, 4]
>>> for x in range(5):
print x
square()
0
+--+
| |
| |
+--+
1
+--+
| |
をちょきちょきと切る
コードを関数に分解してから使用します return
関数の残りのコードをスキップするときはいつでも。
更新:コメンターが明らかに想定しているように、関数の複数の出口ポイントを必ずしも容認するわけではありません。この答えは質問の文脈にあります。複数の出口の問題についての私の意見は、共同で象徴しています それ ティム・ピーターズの:
まあ、シングルエキシットは常に楽器を容易にし、多くの場合推論を簡単にするので最適です(代替が非常に多くの間抜けなブールフラグを導入するまで、それらを追跡することは病気よりも悪いです)。