我正在尝试创建一个使用递归来猜测用户正在考虑的数字的程序。我有点难过。我遇到了第二个代码块def binarySearch(bottom,top)
函数的问题。该程序应该从猜测50开始。如果“N”则它会询问是否更大或更低。如果G那么它应该问75.依此类推。我无法将值设置为不同的答案。另外,我应该怎么做才不会给我漂浮点?
def guess(x):
response = input("Is the number " + str(x) + "? Enter Y/N:\n")
if response == "Y":
print("YAY! I got it!")
return response
else:
print("BOO. . . Ok, I'll keep trying.")
response = input("Is the number greater than or less than " + str(x) + "?Enter G/L:\n")
while response != "G" and reponse != "L":
print("Sorry, that isn't a valid response/")
response = input("Pleae try again. Enter G/L:\n")
return response
def binarySearch(bottom,top):
if bottom == top: #base case
return bottom
elif guess(top+bottom/2) == "G":
top = top + bottom
return binarySearch(middle,top)
elif guess == "L":
top = (top/2)
return binarySearch(bottom,top)
binarySearch(bottom,top)
答案 0 :(得分:1)
要使用非浮点数,请使用int(#number)
。这会将数字转换为整数。
接下来需要做的是设置所选数字的边界。硬编码或打开供用户决定。这将允许适当的二进制猜测。也就是说,二进制搜索通过获取已知的值和已知的最大值来进行工作。
如果猜测的数字更大,则返回的数字应为(int(guessed number + top boundary)/2)
。它在你的代码方式中,首先发生了分裂。如果猜到的数字较少,那么我们选择int( (guessedNumber -minimal known boundary)/2 )
。最后,如果数字匹配,我们就取得了成功。
因此,需要不断检查四个变量:猜测,上边界,下边界和实际数字。
关于递归,根据用户输入创建变量newGuess。 newGuess将是您代码中的中间概念,根据用户响应的结果,它应该是新的低或新高。