Python 超过递归深度

Python 超过递归深度,python,Python,我在战舰游戏中遇到了一个问题! 有时,当我运行代码时,会出现以下错误: RuntimeError: maximum recursion depth exceeded while calling a Python object 这是代码,如果有帮助的话,我会给你们所有人。 问题出在“pick”函数中 有人能帮我吗?将递归更改为循环。下面是一个稍作改动的pick1函数: from collections import deque def need_to_process_now(info, ship

我在战舰游戏中遇到了一个问题! 有时,当我运行代码时,会出现以下错误:

RuntimeError: maximum recursion depth exceeded while calling a Python object
这是代码,如果有帮助的话,我会给你们所有人。 问题出在“pick”函数中


有人能帮我吗?

将递归更改为循环。下面是一个稍作改动的pick1函数:

from collections import deque
def need_to_process_now(info, ship):
    random = numbers1[randint (0,len(numbers1) - 1)]
    if not info[0] + random in numbers:
        return (random, False)
    elif not info[0] + random - 1 in numbers:
        return (random, False)
    elif not random + 1 in numbers:
        return (random, False)
    elif not random + 2 in numbers:
        return (random, False)
    elif not random in numbers:
        return (random, False)

    return (random, True)

def pick1(info, ship):

    infos = deque()
    infos.append((info, ship))
    while len(infos) > 0:
        curr = infos.pop()
        res = need_to_process_now(curr[0], curr[1])
        if not res[1]:
            infos.append(curr)
        else:
            ships[ship].append(res[0])
            y = curr[0][1]
            print y
            numbers1.remove(y)
            if y in numbers2:
                numbers2.remove(y)
            numbers.remove(y)
            for n in range(info[0] - 1):
                ships[ship].append(y + n  + 1)
                if (y + n + 1) in numbers1:
                    numbers1.remove(y + n + 1)
                if (y + n + 1) in numbers2:
                    numbers2.remove(y + n + 1)
                numbers.remove(y + n + 1)
附言。
我认为您需要稍微重新格式化代码,阅读代码并不容易。

当出现Python错误时,请确保包含整个堆栈跟踪(以“Traceback…”开头的行块,一直到您的错误)。这有助于找出问题所在。您似乎正在从
pick1
中调用
pick1(信息,发货)
,以便“重新开始”。这是个坏主意。使用循环代替。显而易见的解决方案是从递归切换到迭代-例如,这不会改变任何东西,当我使用循环时,它只是冻结,显然它确实改变了一些东西,对吗?您已经使用了几个循环,因此您知道它们可以很好地工作。显然,问题不在于你在使用循环,而在于你是如何使用它的。递归在这里绝对是错误的。回到循环,试着让它工作。如果你不能问更多的问题。谢谢,我已经尽力了,这是我的第一门语言。我需要使用deque模块吗?我不知道it@user3888569如您所见,deque是模块
集合的一部分。模块集合是标准模块的路径。所以你不需要安装任何东西。这里是y被打印为[5[…]idk为什么我也得到了一个错误修复。尝试简化
pick2()
函数。您将能够修复这样的错误。
from collections import deque
def need_to_process_now(info, ship):
    random = numbers1[randint (0,len(numbers1) - 1)]
    if not info[0] + random in numbers:
        return (random, False)
    elif not info[0] + random - 1 in numbers:
        return (random, False)
    elif not random + 1 in numbers:
        return (random, False)
    elif not random + 2 in numbers:
        return (random, False)
    elif not random in numbers:
        return (random, False)

    return (random, True)

def pick1(info, ship):

    infos = deque()
    infos.append((info, ship))
    while len(infos) > 0:
        curr = infos.pop()
        res = need_to_process_now(curr[0], curr[1])
        if not res[1]:
            infos.append(curr)
        else:
            ships[ship].append(res[0])
            y = curr[0][1]
            print y
            numbers1.remove(y)
            if y in numbers2:
                numbers2.remove(y)
            numbers.remove(y)
            for n in range(info[0] - 1):
                ships[ship].append(y + n  + 1)
                if (y + n + 1) in numbers1:
                    numbers1.remove(y + n + 1)
                if (y + n + 1) in numbers2:
                    numbers2.remove(y + n + 1)
                numbers.remove(y + n + 1)