Bagaimana saya bisa menghentikan perulangan While?

Saya menulis sebuah while loop dalam sebuah fungsi, tetapi tidak tahu bagaimana cara menghentikannya. Ketika tidak memenuhi kondisi akhir, perulangan hanya berjalan selamanya. Bagaimana saya bisa menghentikannya?

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
Larutan

cukup indentasi kode Anda dengan benar:

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

Anda perlu memahami bahwa pernyataan break dalam contoh Anda akan keluar dari infinite loop yang telah Anda buat dengan while True. Jadi ketika kondisi break adalah True, program akan keluar dari infinite loop dan melanjutkan ke blok indentasi berikutnya. Karena tidak ada blok berikut dalam kode Anda, fungsi berakhir dan tidak mengembalikan apapun. Jadi saya telah memperbaiki kode Anda dengan mengganti pernyataan break dengan pernyataan return.

Mengikuti ide Anda untuk menggunakan infinite loop, ini adalah cara terbaik untuk menulisnya:

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
Komentar (5)

def determine_period(universe_array):
    period=0
    tmp=universe_array
    while period
Komentar (7)

Operator is dalam Python mungkin tidak melakukan apa yang Anda harapkan. Bukannya seperti ini:

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

Saya akan menuliskannya seperti ini:

    if numpy.array_equal(tmp,universe_array):
        break

Operator adalah menguji identitas objek, yang merupakan sesuatu yang sangat berbeda dari kesetaraan.

Komentar (0)