Hoe kan ik een tijdje stoppen?

Ik schreef een while loopin een functie, maar weet niet hoe ik het moet stoppen. Wanneer het niet voldoet aan de eindvoorwaarde, gaat de lus gewoon voor altijd. Hoe kan ik het stoppen?

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

Antwoord 1, Autoriteit 100%

Stuur gewoon uw code in de juiste manier:

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

U moet begrijpen dat de breakVerklaring in uw voorbeeld zal verlaten, de oneindige lus die u hebt gemaakt met while True. Dus wanneer de pauze-voorwaarde waar is, stopt het programma de oneindige lus en gaat u verder met het volgende ingesprongen blok. Omdat er geen volgend blok in uw code is, eindigt de functie en retourneert u niets. Dus ik heb je code opgelost door de breakVerklaring te vervangen door een returnVerklaring.

Volgens uw idee om een oneindige lus te gebruiken, is dit de beste manier om het te schrijven:

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

Antwoord 2, autoriteit 35%

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

Antwoord 3, autoriteit 13%

De operator isin Python doet waarschijnlijk niet wat je verwacht. In plaats van dit:

   if numpy.array_equal(tmp,universe_array) is True:
        break

Ik zou het als volgt schrijven:

   if numpy.array_equal(tmp,universe_array):
        break

De operator istest de objectidentiteit, wat iets heel anders is dan gelijkheid.


Antwoord 4

Ik zou het doen met een for-lus zoals hieronder getoond:

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

Antwoord 5

Hier is een stukje voorbeeldcode van Charles Severance’s “python or Everyone” over schrijven terwijl True loops:

while True:
    line = input('> ')
    if line == 'done':
        break
    print(line)
print('Done!')

Dit heeft me geholpen met mijn probleem!

Other episodes