索引超出阵列的范围

时间:2018-03-09 11:35:51

标签: python arrays

size = len(home)
total_score = []
score = []

for counter in range(0, size):
    print("Enter the Scores for", name[counter],":")

    score[0].append = int(input("Judge 1: "))
    score[0] = validate(0,10,score[0])

    score[1] = int(input("Judge 2: "))
    score[1] = validate(0,10,score[1])

当我运行上面的代码时,我得到以下错误,我已经尝试了一切来纠正它。

score[0].append = int(input("Judge 1: "))

IndexError:列表索引超出范围

3 个答案:

答案 0 :(得分:2)

您将score初始化为空列表。然后在循环的第一次迭代中,您尝试使用第一个元素执行某些操作。但是,列表为空,因此会产生索引错误。

注意,.append将一个元素附加到列表的末尾。您需要在整个列表上执行此操作,而不是在该列表的元素上执行此操作。

score.append(int(input("Judge 1: ")))

答案 1 :(得分:2)

正如his answer中提到的@DavidG,您正在尝试通过执行以下操作来访问空列表的第一个元素:

score = []
// [...]
score[0] // anything with this

但即使纠正此问题,您也应该考虑以下因素:

您正在迭代name(当您在循环中使用name[counter]时) 但是,出于某种原因,您的counter范围基于len(home)

如果home的元素多于name

,该怎么办?

此外,为什么这两个街区没有共享相同的逻辑

score[0].append = int(input("Judge 1: "))
// here ^^^^^^^
score[0] = validate(0,10,score[0])

score[1] = int(input("Judge 2: "))
//      ^-- nothing there
score[1] = validate(0,10,score[1])

应该是(例如):

score.append(validate(0,10,int(input("Judge 1: "))))

score.append(validate(0,10,int(input("Judge 2: "))))

答案 2 :(得分:0)

针对您的具体问题,@ David G是正确的。 .append仅用于将元素添加到列表的末尾。将元素添加到列表的正确代码是score.append(int(input("Judge 1"))

对于您要执行的操作,请尝试按以下方式创建列表:

score = [None] * 2

然后使用@Rafalon的答案中的代码。这样,score[0]score[1]就不会触发索引超出范围错误。