Python学习(一 +) 二分查找算法踩坑

无意中打开一篇分享算法图解-二分查找的文章,正好是Python实现的,所以注意力被转移,牛刀小试一下。

原文地址:https://blog.csdn.net/qq_44762698/article/details/92652039

 

打开PyCharm ,新建了一个项目,Copy代码准备试一下

文章原代码如下:

def binary_search(list, item):
  low = 0    (以下2行)low和high用于跟踪要在其中查找的列表部分
  high = len(list)—1

  while low <= high:  ←-------------只要范围没有缩小到只包含一个元素,
    mid = (low + high) / 2  ←-------------就检查中间的元素
    guess = list[mid]
    if guess == item:  ←-------------找到了元素
      return mid
    if guess > item:  ←-------------猜的数字大了
      high = mid - 1
    else:  ←---------------------------猜的数字小了
      low = mid + 1
  return None  ←--------------------没有指定的元素

my_list = [1, 3, 5, 7, 9]  ←------------来测试一下!
print binary_search(my_list, 3) # => 1  ←--------------------别忘了索引从0开始,第二个位置的索引为1
print binary_search(my_list, -1) # => None  ←--------------------在Python中,None表示空,它意味着没有找到指定的元素
--------------------- 
版权声明:本文为CSDN博主「码小书」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_44762698/article/details/92652039

执行,报各种错。逐一踩,逐一解决

1、注释问题

Python的单行注释是 #开头,独立一行,好像没有行内注释,所以代码中的箭头都要改成 #,且需要单独一行

2、中文空格问题

有些中文空格无法识别,所以删掉多余空格

3、缩进问题

有的缩进可能没影响,有的不行。所以需要调整缩进,快捷键 CTRL+ALT+L 解决

4、类型转换问题

mid = (low + high) / 2  的类型似乎不太对,需要强制转换为int,改为:mid = int((low + high)/ 2)

5、打印方法问题

print 函数名 不知道是不是因为Python版本的原因无法执行,查了一下Python3 打印方法都是print(),所以改成print(binary_search(my_list) , 3)

基本上就这些,综上,修改完之后的代码如下:

def binary_search(list, item):
    # (以下2行)low和high用于跟踪要在其中查找的列表部分
    low = 0
    high = len(list) - 1
    # 只要范围没有缩小到只包含一个元素
    while low <= high:
        # 就检查中间的元素
        mid = int((low + high) / 2)
        guess = list[mid]
        if guess == item:
            # 找到了元素
            return mid
        if guess > item:
            # 猜的数字大了
            high = mid - 1
        else:
            # 猜的数字小了
            low = mid + 1
    # 没有指定的元素
    return None


my_list = [1, 2, 3, 4, 7, 8, 9]
print(binary_search(my_list, 9))
# => 1  ←--------------------别忘了索引从0开始,第二个位置的索引为1
print(binary_search(my_list, -1))
# => None  ←--------------------在Python中,None表示空,它意味着没有找到指定的元素

执行正确,踩坑结束

你可能感兴趣的:(Python,算法)