python-3.x - 在我的二进制搜索算法中,Python 在列表中找不到 0 个索引成员
问题描述
如何修复代码 - 算法找到所有情况下的搜索号码,除非您尝试查找 0 索引号码或在我的情况下 search_num = 1。
list1 = [1, 3, 4, 5, 19, 21, 52, 100, 152]
search_num = 1
def binarySearch(array, number):
lower_b_index = 0
upper_b_index = len(array) - 1
while lower_b_index <= upper_b_index:
mid_point = (lower_b_index + upper_b_index) // 2
if array[mid_point] == number:
return mid_point
elif array[lower_b_index] == number:
return lower_b_index
else:
if array[mid_point] < number:
lower_b_index = mid_point + 1
else:
upper_b_index = mid_point - 1
return False
a1 = binarySearch(list1, search_num)
if a1:
print("The searched position: ", a1 + 1)
else:
print("Not Found!")
解决方案
您的问题不在您的binarySearch
算法中,而是您的if
声明。
您的算法返回a1 = 0
正确的并且您的检查if 0
和 0 是布尔值 False
一个简单的解决方法是return None
检查if a1 is not None
list1 = [1, 3, 4, 5, 19, 21, 52, 100, 152]
search_num = 1
def binarySearch(array, number):
lower_b_index = 0
upper_b_index = len(array) - 1
while lower_b_index <= upper_b_index:
mid_point = (lower_b_index + upper_b_index) // 2
if array[mid_point] == number:
return mid_point
elif array[lower_b_index] == number:
return lower_b_index
else:
if array[mid_point] < number:
lower_b_index = mid_point + 1
else:
upper_b_index = mid_point - 1
return None # Change here
a1 = binarySearch(list1, search_num)
if a1 is not None: # Change here
print("The searched position: ", a1 + 1)
else:
print("Not Found!")
推荐阅读
- react-native - React Native DatePicker 特定时间
- ios - 在 Swift 中将具有多个键的字典数组减少为具有单个键的字典数组
- javascript - Javascript - 在对象数组中的对象之间共享方法
- java - ArrayList add() 方法不起作用。无法添加另一个值并将其添加到 jTable
- gradle - 缺少 JavaFX 应用程序类 com.MainApp
- python - 使用故意弱私钥解密消息无限期挂起
- flutter - Flutter中如何在左侧放置AppBar标题
- php - Codeigniter 登录(会话)问题
- websocket - SockJS 是如何选择协议的?
- c# - 如何在不使用 git 命令的情况下通过命令行从 azure 克隆 repo