无意中打开一篇分享算法图解-二分查找的文章,正好是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表示空,它意味着没有找到指定的元素
执行正确,踩坑结束