14

関数に aを書きました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
4

5 に答える 5

23

コードを正しくインデントするだけです:

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
于 2008-12-15T14:37:59.760 に答える
8
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
于 2008-12-15T14:38:42.847 に答える
0

以下に示すように、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
于 2008-12-16T19:03:27.803 に答える