[英]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.