while loop
は関数内にありますが、停止する方法がわかりません。最終条件を満たしていない場合、ループは永遠に続きます。どうすれば停止できますか?
def determine_period(universe_array):
period=0
tmp=universe_array
while True:
tmp=apply_rules(tmp)#aplly_rules is a another function
period+=1
if numpy.array_equal(tmp,universe_array) is True:
break #i want the loop to stop and return 0 if the
#period is bigger than 12
if period>12: #i wrote this line to stop it..but seems it
#doesnt work....help..
return 0
else:
return period
コードを正しくインデントしてください:
def determine_period(universe_array):
period=0
tmp=universe_array
while True:
tmp=apply_rules(tmp)#aplly_rules is a another function
period+=1
if numpy.array_equal(tmp,universe_array) is True:
return period
if period>12: #i wrote this line to stop it..but seems its doesnt work....help..
return 0
else:
return period
サンプルのbreak
ステートメントは、while True
で作成した無限ループを終了することを理解する必要があります。したがって、ブレーク条件がTrueの場合、プログラムは無限ループを終了し、次のインデントされたブロックに進みます。コードには次のブロックがないため、関数は終了し、何も返しません。したがって、break
ステートメントをreturn
ステートメントに置き換えることにより、コードを修正しました。
無限ループを使用するというあなたのアイデアに従って、これはそれを書く最良の方法です:
def determine_period(universe_array):
period=0
tmp=universe_array
while True:
tmp=apply_rules(tmp)#aplly_rules is a another function
period+=1
if numpy.array_equal(tmp,universe_array) is True:
break
if period>12: #i wrote this line to stop it..but seems its doesnt work....help..
period = 0
break
return period
def determine_period(universe_array):
period=0
tmp=universe_array
while period<12:
tmp=apply_rules(tmp)#aplly_rules is a another function
if numpy.array_equal(tmp,universe_array) is True:
break
period+=1
return period
Pythonのis
演算子はおそらくあなたが期待することをしないでしょう。これの代わりに:
if numpy.array_equal(tmp,universe_array) is True:
break
次のように書きます。
if numpy.array_equal(tmp,universe_array):
break
is
演算子は、オブジェクトの同一性をテストします。これは、等価性とはまったく異なるものです。
以下に示すようにforループを使用して実行します。
def determine_period(universe_array):
tmp = universe_array
for period in xrange(1, 13):
tmp = apply_rules(tmp)
if numpy.array_equal(tmp, universe_array):
return period
return 0