كيف يمكنني التوقف عن حلقة في حين؟
-
21-08-2019 - |
سؤال
وكتبت 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
. حتى عندما يكون الشرط كسر هو صحيح، وإنهاء البرنامج في حلقة لا نهائية والاستمرار في كتلة بادئة المقبل. حيث لا يوجد الكتلة التالية في التعليمات البرمجية، تنتهي وظيفة ولا يعود أي شيء. حتى لقد رمز ثابت عن طريق استبدال البيان 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
والمشغل is
في بيثون ربما لا تفعل ما كنت تتوقع. بدلا من هذا:
if numpy.array_equal(tmp,universe_array) is True:
break
وأود أن أكتب مثل هذا:
if numpy.array_equal(tmp,universe_array):
break
والاختبارات مشغل is
الكائن الهوية، وهو أمر يختلف تماما عن المساواة.
وأود أن تفعل ذلك باستخدام لحلقة كما هو مبين أدناه:
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