1. ホーム
  2. python

[解決済み] pythonのGOTOに相当するもの [重複]。

2022-03-02 09:40:49

質問

私は独学でpython2.7を勉強しています。私はGOTOステートメントを持っているBATCHを使用するいくつかの経験を持っています。 pythonでそれを行うにはどうすればよいですか?例えば、私が5行目から18行目にジャンプしたいとします。

このトピックに関する過去の質問があることは承知していますが、十分な情報が得られなかったり、私の現在の理解にはpythonのレベルが高すぎたりしています。

どのように解決するのですか?

Goto は、非常に非構造的なコードにつながるため、コンピュータサイエンスやプログラミングでは普遍的に嫌われています。

Python は (今日のほとんどすべてのプログラミング言語と同様に) 構造化プログラミング は、if/then/else、ループ、サブルーチンを使ってフローを制御します。

構造化された方法で考えるための鍵は、コード上でどのように、そしてなぜ分岐しているのかを理解することです。

例えば、Pythonに goto と対応する label ステートメント 震える . 次のコードを見てください。この中で、ある数字が0以上であれば、それを表示しています。

number = input()
if number < 0: goto negative
if number % 2 == 0:
   print "even"
else:
   print "odd"
goto end
label: negative
print "negative"
label: end
print "all done"

もし、あるコードがいつ実行されたかを知りたければ、プログラムの中を注意深くトレースバックして、ラベルがどのようにたどり着いたかを調べる必要があります - これは実際にはできないことです。

例えば、上記を次のように書き換えることができます。

number = input()
goto check

label: negative
print "negative"
goto end

label: check
if number < 0: goto negative
if number % 2 == 0:
   print "even"
else:
   print "odd"
goto end

label: end
print "all done"

ここで、quot;end"に到達する方法は2通りあり、どちらが選ばれたかはわからない。プログラムが大きくなると、このような問題はさらに深刻になり スパゲッティ・コード

それに比べて、以下はどうでしょう。 となる このプログラムをPythonで書いてみましょう。

number = input()
if number >= 0:
   if number % 2 == 0:
       print "even"
   else:
       print "odd"
else:
   print "negative"
print "all done"

のツリーを辿ることで、ある特定のコード行を見て、それがどのような条件で満たされているかを知ることができるのです。 if/then/else の中にあるブロックです。例えば、次の行は print "odd" が実行されると ((number >= 0) == True) and ((number % 2 == 0) == False) .