Ik schreef een while loop
in 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 break
Verklaring 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 break
Verklaring te vervangen door een return
Verklaring.
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 is
in 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 is
test 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!