首页 > 解决方案 > 我的 for 循环随机卡住并且没有完成它的范围

问题描述

我的 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 语句。我不知道为什么会这样。

标签: pythonfor-loop

解决方案


它卡住的原因是边界条件有错误。如果数不等于mid,左右应该分别等于mid + 1and mid - 1。无需再考虑中间。由于您一次又一次地考虑 mid ,因此您的状况永远不会脱离这​​个循环,因此是无限循环。

elif x > mid:
    left = mid + 1

elif x < mid:
    right = mid - 1

这些应该是您对左右的新值。无需再次考虑 mid,因为它不等于目标值,如果是,则如果条件为真,则为最高。


推荐阅读