首页 > 解决方案 > 列表索引超出范围;使用定义

问题描述

我是 python 新手,我不知道为什么我一直遇到错误。我已经指出了我会遇到错误的地方。

def lis_add(lis, element):
    lis = [ ]
    lis.append(element)
    return lis

def s_lis(lis):
    square = [ ]
    for i in range(len(lis)):
    square.append(lis[i] * lis[i])
    return square

def main():
    lis = [ ]
    for i in range(10):
        x = eval(input("Enter a number: "))
        lis = lis_add(lis, x)

    s = [ ]
    s = s_lis(lis)

    print("******* the input list *********")
    for i in range(10):
        print(lis[i]) *#error*
        *#list index out of range*

    print("******** the sqaure list *********")
    for i in range(len[s]):
        print(s[i])
    
    main() *#for some odd reason, I would also get an error here too*

标签: python

解决方案


问题:

在此处查看此代码:

def lis_add(lis, element):
    lis = [ ]
    lis.append(element)
    return lis

更具体地说,在这里:

    lis = [ ]

每次调用时它都会重置列表以使其没有元素。因此,调用此列表时,您的列表的大小仅为 1:

for i in range(10):
    print(lis[i]) *#error*

并且 main 有一个错误,因为 main 内部有一个错误。

其他建议:

  1. 使用int(input()),不使用eval
  2. 你写,,for i in range(len[s]):但它应该是for i in range(len(s)):
  3. 使用print(lis[:10])代替for i in range(10): print(lis[i])print(s)代替for i in range(len(s)): print(s[i])
  4. 不要使用list[i]*list[i],而是使用list[i]**2. 另外,在square.append(lis[i] * lis[i])
  5. 使用列表理解,即square = [x**2 for x in lis]lis = [input("Enter a number: ") for i in range(10)]
  6. 删除这段代码,没有必要:s = [ ]

此外,main最后一行有一个选项卡,它在里面被调用main。所以,main正在调用main. 这不会返回错误,它称为递归,有时非常有用。但是,这里不是。所以我建议删除该选项卡。


推荐阅读