簡體   English   中英

我的 for 循環隨機卡住並且沒有完成它的范圍

[英]My for loop randomly gets stuck and doesnt complete its range

我的 for 循環一直在 main 中停止。 它應該調用 def binarySearch 10000 次並將每次嘗試的猜測總數相加。 我注意到當我將范圍降低到 100 時,for 循環大部分時間都有效。 它有時仍然只是凍結並且從不打印任何東西。

import random

def binarySearch(left, right, x):

    counter = 0 #guesses per try

    while left <= right:
        counter+=1
        
        mid = (right + left) // 2
        
        if x == mid:
            return counter

        elif x > mid:
            left = mid

        elif x < mid:
            right = mid


def main():  

    guesses = 0 # total number of guesses

    ###Problem here###
    for x in range(10001):
        
        lef = 0     #min
        rig = 1000  #max
        num = random.randint(lef, rig) #random number
        guesses += binarySearch(lef, rig, num) #calls binarySearch and sums the total guesses

        
    print("Total guesses from 10000 tries: ", guesses)


main()

編輯:我將問題縮小為:

elif x < 中:左 = 中

我測試了好幾次,得出的結論是 while 循環最終會卡住重復 else if 語句。 我不知道為什么會這樣。

它卡住的原因是因為邊界條件有錯誤。 如果數字不等於mid,那么left和right應該分別等於mid + 1mid - 1 沒必要再考慮mid了。 由於您一次又一次地考慮 mid ,因此您的條件永遠不會出現在這個循環中,因此永遠不會出現無限循環。

elif x > mid:
    left = mid + 1

elif x < mid:
    right = mid - 1

這些應該是您的左右新值。 不需要再次考慮 mid 因為它不等於目標值,如果是的話,如果條件為真,則最頂層。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM