这里的任务是使用指定的输入创建一个字典。
第一个元素是键,后面的元素是值。
输入:
name, George Mason
pa, 100.0, 100.0, 95.0, 95.0, 97.0
lab, 100.0, 100.0, 100.0, 0.0, 100.0
zy, 100.0, 100.0, 100.0, 100.0, 100.0
mid1, 90.0
mid2, 80.0
final, 85.0
预期输出,如果项目=错误:
{'name': 'George Mason',
'pa': [100.0, 100.0, 95.0, 95.0, 97.0],
'lab': [100.0, 100.0, 100.0, 0.0, 100.0],
'zy': [100.0, 100.0, 100.0, 100.0, 100.0],
'mid1': 90.0, 'mid2': 80.0, 'final': 85.0}
预期输出,如果项目=True:
{'name': 'George Mason',
'pa': [100.0, 100.0, 95.0, 95.0, 97.0, 97.4, 97.4, 97.4, 97.4],
'lab': [100.0, 100.0, 100.0, 0.0, 100.0, 80.0, 80.0, 80.0, 80.0,
80.0, 80.0],
'zy': [100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0,
100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0],
'mid1': 90.0, 'mid2': 80.0, 'final': 85.0}
";如果项目为True并且少于9个编程作业、11个实验室或15本zyBook,您需要为所有缺失的分数(你不需要考虑有更多分数的情况等级)。要对给定的作业类型执行此操作,请计算该作业的平均分数作业类型,然后将该平均值的副本添加到给定分数的末尾值,以便该作业类型具有正确的等级数。例如,如果该文件具有以下行";pa,1.0,2.0,3.0,4.0,5.0,6.0,7.0〃;,然后只有7个编程分配等级值。如果这个项目是真的,你将计算给定等级的平均值((1.0+2.0+3.0+4.0+5.0+6.0+7.0)/7=4.0),并将其添加到等级值列表的末尾,这样字典的值键";pa";将是列表[1.0,2.0,3.0,4.0,5.0,6.0,7.0,4.0,4.0]
我甚至还没有到达True部分。现在我正试图找出如何摆脱KeyError:("name","Carl F.Gauss")。我假设这是因为一旦代码到达第一行的末尾,它就不知道要移到下一行。我该怎么做
我的代码当前为:
def read_grades_file(filename, project=False):
file = open(filename, 'r')
grade_dict = {}
if project == False:
for line in file.readlines():
values = [line.split(', ')]
key = tuple(values[0])
val = values[1:]
grade_dict[key].append(val)
if project == True:
for line in file.readlines():
values = [line.split(', ')]
key = tuple(values[0])
val = values[1:]
return grade_dict
print(read_grades_file('gauss.grades', project=False))
以下是第一部分的建议(这是第二部分的基础):
def read_grades_file(filename, project=False):
grade_dict = {}
with open(filename, 'r') as file:
for line in file:
key, *values = line.strip().split(', ')
if key in {'pa', 'lab', 'zy'}:
grade_dict[key] = list(map(float, values))
else:
value = values[0]
if key in {'mid1', 'mid2', 'final'}:
value = float(value)
grade_dict[key] = value
if project:
pass
return grade_dict
在文件的行中循环
.strip()
line
以消除空白,尤其是在末尾('n'
).split(', ')
,并在其第一项key
和其余项values
中解包所得到的列表- 如果密钥是
pa
、lab
或zy
,则将values
转换为浮点列表并将其分配给key
- 否则,将
values
的剩余项extact到变量value
中,如果key
是mid1
、mid2
或final
,则将其转换为float,并将其分配给key
输入的结果
name, George Mason
pa, 100.0, 100.0, 95.0, 95.0, 97.0
lab, 100.0, 100.0, 100.0, 0.0, 100.0
zy, 100.0, 100.0, 100.0, 100.0, 100.0
mid1, 90.0
mid2, 80.0
final, 85.0
是
{'name': 'George Mason',
'pa': [100.0, 100.0, 95.0, 95.0, 97.0],
'lab': [100.0, 100.0, 100.0, 0.0, 100.0],
'zy': [100.0, 100.0, 100.0, 100.0, 100.0],
'mid1': 90.0,
'mid2': 80.0,
'final': 85.0}
关于第二部分:检查列表是否具有所需的最小长度。如果不是,则计算当前项目的平均值(例如,使用sum
、math.fsum
或statistics.mean
)和具有该平均值的列表的.extend()
,以满足最小长度要求。(如果你需要帮助,请告诉我。)