python - Python3--如何在数字游戏中实现二分查找
问题描述
您好,我正在学习二叉搜索树。该程序自行解释。我对是否应该为一半数字编写函数感到困惑。我只是对这一切的逻辑感到困惑。如果您能提供帮助,我将不胜感激。
list_of_numbers = [i for i in range(1,101)]
print("THIS IS YOUR LIST OF NUMBERS", list_of_numbers)
lowest_number = 1
highest_number = len(list_of_numbers)-1
mid = (len(list_of_numbers)) / 2
print("IS THIS YOUR NUMBER???:", mid)
number_of_guesses = 0
while lowest_number <= highest_number:
print('Is your number: ', mid)
print('please enter "<,>, or ="')
first_guess = input("???:::::::::")
first_answer = first_guess
print(first_answer)
equals = "="
greaterthan = ">"
lessthan = "<"
if first_answer == equals:
print('Great JOB I GOT YOUR NUMBER ON THE FIRST TRY')
break
if first_answer == lessthan:
print('The number is now between 49-1, half it.')
break
elif first_answer == greaterthan:
print('The number is now between 51-100')
break
else:
print('Type one of the answers')
break
number_of_guesses = number_of_guesses + 1
解决方案
您不需要一个简单地除以 2 的函数。对于二进制搜索,您应该做的是跟踪数字的上限和下限;然后您可以将猜测计算为(upper + lower) / 2
。如果玩家说猜测太高,则将上限设置为当前猜测。如果他们说猜测太低,则将下限设置为当前猜测。重复此操作,直到找到正确的数字。
顺便说一句,这不是真正的搜索树,它只是一个基本的二分搜索。搜索树会将所有可能的数字存储在一个连接的树形图中,并使用它来搜索答案,而这并没有这样做。
推荐阅读
- c - 在 C 中声明函数时是否需要数据类型标识符?
- python - 有没有办法使用 groupby 计算和计算文本列的平均值?
- ruby-on-rails - 主动存储的高响应时间
- c# - 如何为 C# DLL 提供 C 兼容接口?
- swift - 成功通知动画额外参数错误SwiftUI
- c++ - C++ 向量加减法抛出“表达式:向量下标超出范围”。错误
- reactjs - react js,如何顺序/同步更新相互依赖的状态?
- javascript - Npm 版本带回双字符串键:值对
- php - 504 网关超时服务器没有及时响应问题
- python - 从“dataclass.astuple”中排除字段