创建总和列表
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
我是 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