如何在行尾中断 for 循环
How to break for loop at the end of a line
手头的任务是使用指定的输入创建字典。
第一个元素是键,后面的元素是值。
输入:
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
预期输出,如果项目 = False:
{'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}
"如果项目为真且少于9个
编程作业、11 个实验室或 15 本 zyBooks,您将需要为
所有缺失的成绩(你不需要考虑有更多的情况
成绩)。要针对给定的作业类型执行此操作,请计算该作业的平均成绩
分配类型,然后将该平均值的副本添加到给定成绩的末尾
值,以便该作业类型具有正确的成绩数。例如,如果
该文件包含以下行“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]."
我什至没有到达真正的部分。现在我正试图弄清楚如何摆脱 KeyError: ('name', 'Carl F. Gauss\n')。我假设这是因为代码不知道一旦到达第一行的末尾就移动到下一行。我该怎么做?
我目前的代码是:
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
的剩余项提取到变量value
中,如果key
为mid1
、mid2
或[,则将其转换为float =29=],赋值给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()
平均值满足最小长度要求的列表。 (如果您需要帮助,请告诉我。)
手头的任务是使用指定的输入创建字典。
第一个元素是键,后面的元素是值。
输入:
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
预期输出,如果项目 = False:
{'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}
"如果项目为真且少于9个 编程作业、11 个实验室或 15 本 zyBooks,您将需要为 所有缺失的成绩(你不需要考虑有更多的情况 成绩)。要针对给定的作业类型执行此操作,请计算该作业的平均成绩 分配类型,然后将该平均值的副本添加到给定成绩的末尾 值,以便该作业类型具有正确的成绩数。例如,如果 该文件包含以下行“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]."
我什至没有到达真正的部分。现在我正试图弄清楚如何摆脱 KeyError: ('name', 'Carl F. Gauss\n')。我假设这是因为代码不知道一旦到达第一行的末尾就移动到下一行。我该怎么做?
我目前的代码是:
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
的剩余项提取到变量value
中,如果key
为mid1
、mid2
或[,则将其转换为float =29=],赋值给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()
平均值满足最小长度要求的列表。 (如果您需要帮助,请告诉我。)