下面的python代码出错

时间:2014-09-12 16:02:43

标签: python

我是python程序的新手。以下代码与列表有一些错误。

len = []

def collatz_length(n,count):
                ++count
                if len[n]:
                        return len[n]
                if n == 1:
                        len[n] = count
                elif n & 1:
                        len[n] = count + collatz_length(3 * n + 1,0)
                else:
                        len[n] = count + collatz_length(n >> 1,0)

                return len[n]


print collatz_length(13,0)

我想弄清楚长度。但是给出错误

输出

Traceback (most recent call last):
  File "collatz.py", line 21, in <module>
    print collatz_length(13,0)
  File "collatz.py", line 9, in collatz_length
    if len[n]:
IndexError: list index out of range

2 个答案:

答案 0 :(得分:2)

这意味着n超出了列表的长度(最初为零)。您需要查看列表中是否有len[n],而不是n

# Renaming your array to my_array so that it doesn't shadow the len() function,
# It's also better to put it as a parameter, not a global
def collatz_length(n, count, my_array):
    if n < len(my_array):
        return my_array[n]
    # ... all your elses

答案 1 :(得分:0)

如果你有一个包含5个内容的数组,并尝试访问数组[5],那么你正在读取数组的边界之外。我认为这就是正在发生的事情,但你的代码也很难理解。如果这不是正在发生的事情,您可能需要添加一些评论或以其他方式澄清您在做什么。看起来你有一个空数组并且正在尝试访问其中的位置13,这没有任何意义。