python第三次作业
将二分法查找按照面向对象的思想重写
要求:输入一个整数列表,进行二分法查找
class Half_Find():
def __init__(self, list1, num1):
self.list1 = list1
self.num1 = num1
def h_find(self):
if len(self.list1) == 0 or len(self.num1) == 0:
return '数据不能为空'
self.num1 = int(self.num1)
self.list1 = list(self.list1) # 转为字符串列表
self.list1 = [int(self.list1[i]) for i in range(len(self.list1))] # 遍历字符串列表的每个元素,强制转为int
self.list1.sort() # 排序
i = 0
j = len(self.list1) - 1
while i <= j:
mid = (i + j) // 2 # 计算中间元素索引
if self.list1[mid] == self.num1: # 中间元素比较
return '找到了,值:', self.num1
else:
if self.num1 < self.list1[mid]:
j = mid - 1 # 向左折半
else:
i = mid + 1 # 向右折半
if i > j:
return '未找到'
if __name__ == '__main__':
li = input('请输入序列:')
num = input('请输入需要查找数字:')
find1 = Half_Find(li, num)
print(find1.h_find())
运行结果:
请输入序列:12345678955
请输入需要查找数字:4
('找到了,值:', 4)
请输入序列:1235645423
请输入需要查找数字:9
未找到
请输入序列:
请输入需要查找数字:
数据不能为空