【问题标题】:python Traceback (most recent call last):python Traceback(最近一次调用):
【发布时间】:2016-07-01 13:03:04
【问题描述】:

我正在尝试创建一个猜谜游戏,但我遇到了一些错误,谁能帮助我?

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

外星人)

我的错误是

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

【问题讨论】:

  • 这可能是由于无限递归。等我重新格式化并查看代码。
  • 好的,谢谢。这意味着很多

标签: python search binary binary-search-tree binary-search


【解决方案1】:

您遇到的主要问题是您将猜测与其位置混淆了。您将guess 计算为A 中值的中点,然后将mini 或maxi 设置为guess,而不是其位置。我希望这种混乱会使您的猜测超出二分搜索范围,并且您会得到无限递归。

要调试此问题,请添加一些打印语句来跟踪执行情况。例如,你的函数的第一行应该是这样的

print find, mini, maxi

然后,当您计算猜测并移动一个端点时,在您离开例程之前打印出这些值。

您似乎省略了将值放入 A 的代码,所以我完全不确定其中的内容。

除此之外,还有结构性问题。在 ifelse 分支中的 return 之后,您无法访问代码。您根本无法到达 else 分支,因为前三个分支涵盖了所有可能性(排中律)。

这会让你动起来吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-31
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多