我是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