python-二分法,‘’人首分离术‘’!
import random
# 获取100以内的随机数
start_num =0
end_num = 100
while True:
real_num = random.randint(0,100)
num = int(input('please input your guess num>>>>:'))
if num>real_num:
end_num = num
print(f'to big,范围是{start_num}~{end_num}')
elif num < real_num:
start_num = num
print(f'to small,范围是{start_num}~{end_num}')
else:
print('guess right!')
break
'''这个猜数字游戏,很好的运用了二分法的思想,
如果猜大了,那么就把输入的值当做范围的上限,
如果猜小了,那么就把输入值当做范围的下限'''
实例2如下:
# 用二分法在列表搜索值321,二分法查找必须有序
l = [11, 23, 43, 57, 68, 76, 81, 99, 111, 123,
321, 432, 567, 666, 712, 899, 999, 1111]
# 排序
l.sort()
def binary_target(target_num, l):
if len(l) == 0:
print('没找到')
return
# 先获取中间位置索引值
middle_index = len(l) // 2
# 判断中间索引对应的值比目标值大还是小
if target_num > l[middle_index]:
# 说明要找的元素只可能出现在列表的右侧
l_right = l[middle_index + 1:]
print(l_right)
binary_target(target_num, l_right)
elif target_num < l[middle_index]:
# 说明要找的元素只可能出现在列表的左侧
l_left = l[:middle_index]
print(l_left)
binary_target(target_num, l_left)
else:
print('找到了', target_num)
binary_target(321,l)
查找过程图示:
学完的状态!
学完头脑分离···
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/48xz/p/15574903.html
内容来源于网络,如有侵权,请联系作者删除!