在python中的代码中获取索引错误

时间:2013-04-02 16:39:14

标签: python

def fact(n):
    fac = 1
    while (n>1):
        fac = fac*n
        n -= 1

    return fac

z = 0
t = int(raw_input())
nz = []
for i in range(0,t):
    c = 0
    n = int(raw_input())
    z = fact(n)

    z = list(str(z))
    for j in range(len(z)-1,1,-1):
        if z[j] != '0':
            break
        else:
            c +=1
    nz[i].append(c)
for k in range(0,t):
    print nz[k]

你好我得到了

  

Indexerror:索引超出范围“nz [i] .append(c)

该程序应计算N的阶乘中的尾随零。 你还可以帮我优化我的代码,所以它也可以运行N的大值?

2 个答案:

答案 0 :(得分:6)

nz是空列表。它没有任何元素,因此nz[i]总会引发IndexError。也许你的意思是nz.append(c)即。在c的末尾添加nz

答案 1 :(得分:0)

这是append()的工作方式:

  

list.append(x)的

     

将项目添加到列表的末尾;相当于[len(a):] = [x]。

因此您可能希望将nz[i].append(c)更改为nz.append(c),因为您的i索引已由附加功能处理。您实际上假设您的列表中有i元素,这是错误的,因为您使用的是空列表

关于优化,您的问题可能是由于您的递归限制。在你的python shell中尝试import sys; sys.getrecursionlimit(),你应该看到类似1000的结果。

交换因子函数的迭代版本可能是一个开始

def fact(n):
    r = 1
    for x in range (n):
        r = r * (x+1)
    return r