python第三次作业
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
将二分法查找按照面向对象的思想重写
要求输入一个整数列表进行二分法查找
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
未找到
请输入序列:
请输入需要查找数字
数据不能为空