def binary_search(list, target):
  lower = 0 
  upper = len(list) - 1
    
  while lower <= upper: 
    mid = (lower + upper) // 2  # Floor Division
    guess = list[mid]
    if guess == target:
      return mid
    if guess > target:
      upper = mid - 1
    else: 
      lower = mid + 1
 
  return None
解释这个算法为什么会工作.
二进制搜索算法是设计用于在一个排序列表中的特定元素或目标中搜索.该算法通过将搜索间隔重复分成一半,直到找到目标值或搜索间隔空.最初,由较低和较高变量定义的搜索间隔包含整个列表.搜索间隔的中点通过通过地板分区计算,通过以较低和较高指数的平均值计算.该算法然后将中点的元素的值比较为目标值.如果猜测与目标值等,该函数返回猜测的索引.如果猜测比目标值大,搜索间隔的上限减少,排除所有猜测值,因为目标值必须在搜索间隔的半个中.如果目标值比目标值大,则搜索间隔的下半个中点必须在目标值的上半个中位置.如果搜索算法是简单的,它可以继续在目标值的位置上进行测试,因为搜索间隔的位置要小得多,而目标值在目标值的上方位上不太大.如果搜索间隔没有被发现,则搜索算法需要在目标值的上方位上进行更小的测试.