创建总和列表

Creating a list of sums

我是 Python 的新手,我正在努力创建一个由 for 循环生成的总和列表。

我收到了一份学校作业,其中我的程序必须模拟 class 盲人学生在多项选择测试中的分数。

def blindwalk():       # Generates the blind answers in a test with 21 questions
    import random
    resp = []
    gab = ["a","b","c","d"]
    for n in range(0,21):
        resp.append(random.choice(gab))
    return(resp)

def gabarite():        # Generates the official answer key of the tests
    import random
    answ_gab = []
    gab = ["a","b","c","d"]
    for n in range(0,21):
        answ_gab.append(random.choice(gab))
    return(answ_gab)

def class_tests(A):    # A is the number of students
    alumni = []
    A = int(A)
    for a in range(0,A):
        alumni.append(blindwalk())
    return alumni

def class_total(A):    # A is the number of students
    A = int(A)
    official_gab = gabarite()
    tests = class_tests(A)
    total_score = []*0
    for a in range(0,A):
        for n in range(0,21):
            if  tests[a][n] == official_gab[n]:
                total_score[a].add(1)
    return total_score

当我 运行 class_total() 函数时,我得到这个错误:

    total_score[a].add(1)

IndexError: list index out of range

问题是:我如何评估每个学生的分数并用他们创建一个列表,因为这是我想用 class_total() 函数做的事情。

我也试过了

if  tests[a][n] == official_gab[n]:
                    total_score[a] += 1

但我遇到了同样的错误,所以我想我还没有完全理解列表在 Python 中的工作原理。

谢谢!

(另外,我不是英语母语,所以如果我不够清楚,请告诉我)

这一行:

total_score = []*0

事实上,以下任何一行:

total_score = []*30
total_score = []*3000
total_score = []*300000000

导致total_score被实例化为一个空列表。在这种情况下,它甚至没有第 0 个索引!如果您想将长度为 l 的列表中的每个值都初始化为 x,则语法看起来更像:

my_list = [x]*l

或者,您可以使用 .append 而不是尝试访问特定索引,而不是事先考虑大小,如:

my_list = []
my_list.append(200)
# my_list is now [200], my_list[0] is now 200
my_list.append(300)
# my_list is now [200,300], my_list[0] is still 200 and my_list[1] is now 300