如何在行尾断开循环



这里的任务是使用指定的输入创建一个字典。

第一个元素是键,后面的元素是值。

输入:

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中解包所得到的列表
  • 如果密钥是palabzy,则将values转换为浮点列表并将其分配给key
  • 否则,将values的剩余项extact到变量value中,如果keymid1mid2final,则将其转换为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}

关于第二部分:检查列表是否具有所需的最小长度。如果不是,则计算当前项目的平均值(例如,使用summath.fsumstatistics.mean)和具有该平均值的列表的.extend(),以满足最小长度要求。(如果你需要帮助,请告诉我。)

相关内容

  • 没有找到相关文章