سؤال

وكتبت 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top