创建总和列表



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

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

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

相关内容

  • 没有找到相关文章

最新更新