我正在尝试创建一个猜谜游戏,但我遇到了一些错误,有人可以帮助我吗?
A = A + [i]
# Define two variables which will be the end point of
# the search span
mini = 0
maxi = len(A) - 1
stepcounter = 1
find = int(input("Think of a number between 1 and 1000"))
def guessgame(find, A, mini, maxi, stepcounter):
# This calculates the value of the midpoint element
# in the list guess = (A[mini] + A[maxi]) // 2
if guess == find:
return
print("You think of", guess, "I did this in", stepcounter, "number of steps")
elif guess < find:
mini = guess
stepcounter = stepcounter + 1
guessgame(find, A, mini, maxi, stepcounter)
elif guess > find:
maxi = guess
stepcounter = stepcounter + 1
guessgame(find, A, mini, maxi, stepcounter)
else:
return
print("Not in array")
guessgame(find, A, mini, maxi, stepc
ounter)
我的错误是
traceback most recent call last:
line 34 guessgame(find, a, mini,maxi, supercounter)
File "C:/Users/Acer VN7/PycharmProjects/untitled1/py.py", line 20, in guessgame
if guess == find:
RecursionError: maximum recursion depth exceeded in comparison
答案 0 :(得分:0)
您遇到的主要问题是您将猜测与其位置混淆。您将猜测计算为 A 中值的中点,然后将mini或maxi设置为 guess ,而不是其位置。我希望这种混乱可以推动你对二进制搜索范围的猜测,并获得无限递归。
要调试此问题,请添加一些print语句以跟踪执行情况。例如,函数的第一行应该是
print find, mini, maxi
然后,当您计算猜测并移动一个端点时,请在离开例程之前打印出这些值。
您似乎省略了将值放入 A 的代码,因此我完全不确定其中的内容。
除此之外,还存在结构性问题。您无法在 if 和 else 分支中返回后获取代码。您根本无法进入其他分支,因为前三个分支涵盖了所有可能性(排除中间的法律)。
这会让你感动吗?