在一个数字范围内,有一个数字作为炸弹,谁猜中这个炸弹就被惩罚.比如范围是1~99,炸弹是60,然后猜了一个数字是30,30不是炸弹,那么现在猜数字的范围就缩小到30~100,又猜了一个数字80,80也不是炸弹,那么现在又缩小范围到30~80,每次猜不能猜边界上的值,直到有人猜中这个炸弹
import random, time
value_list = [i for i in range(1, 101)] # 生成一个数字列表
print(value_list)
first_index = 0 # 开始索引
end_index = len(value_list) - 1 # 末尾索引
print(first_index, end_index)
num = random.randint(1, 100) # 随机生成一个数字炸弹
print(value_list[99])
print('随机数字是:', num) # 打印随机数
while True:
d_index = int((first_index + end_index) / 2) # 取中间索引
print('搜索:', value_list[d_index], first_index, end_index) # 打印选择数据及索引值
time.sleep(1) # 等待1s
if num == value_list[d_index]: # 随机值和选到的值相同
index = value_list.index(num) # 获取当前值在列表中的索引
print('随机数字的索引是:', index, 'value=', num) # 打印结果
break # 结束循环
else:
if num > value_list[d_index]: # 随机值大于选择的值
first_index = d_index # 将当前索引值赋值给开始索引
else:
end_index = d_index # 将当前索引赋值给末尾索引
if first_index == end_index - 1: # 搜索到最后两个值
if num == value_list[end_index]: # 对最大的索引数据进行比较,相同则输出
index = value_list.index(num)
print('随机数字的索引是:', index, 'value=', num)
break
elif num == value_list[first_index]: # 对最小的索引数据进行比较,相同则输出
index = value_list.index(num)
print('随机数字的索引是:', index, 'value=', num)
break
else: # 随机值不是最大值也不是最小值
print(value_list[d_index], first_index, d_index, end_index)
print('未找到索引')
break