[英]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 + 1
和mid - 1
。 沒必要再考慮mid了。 由於您一次又一次地考慮 mid ,因此您的條件永遠不會出現在這個循環中,因此永遠不會出現無限循環。
elif x > mid:
left = mid + 1
elif x < mid:
right = mid - 1
這些應該是您的左右新值。 不需要再次考慮 mid 因為它不等於目標值,如果是的話,如果條件為真,則最頂層。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.