我是python的初学者,学习如何读取和操作文本文件中的数据。
假设我有一个文本文件 grades.txt :
.25 45 67 89
.75 23 45
我想创建一个程序来平均每一行的等级,然后乘以权重,该权重始终是每行中的第一个数字。
然后应该为所有行添加加权总计并打印最终成绩。
如果我不知道文本文件中的成绩数量或者我的权重不同,我该如何做?
目前我只能知道会有多少成绩。
到目前为止代码:
def main():
file = open("grades.txt", "r")
for line in file:
weight, gradeOne, gradeTwo, gradeThree = line.split()
grade = (int(gradeOne) + int(gradeTwo) + int(gradeThree)/3
print(float(weight) * grade)
main()
答案 0 :(得分:3)
您可以使用line.split(' ')
返回权重为list[0]
的成绩列表。
然后你可以摆脱重量,并在for循环中循环遍历列表。
您添加所有成绩,然后除以成绩列表的长度 不要意外地包括重量!
答案 1 :(得分:3)
分割字符串后,使用map()
将每个项目转换为float
。使用*
解包将第一项分配给weight
,其余项目分配给名为list
的{{1}}。
grades
然后,您可以使用def main():
file = open("grades.txt", "r")
for line in file:
weight, *grades = map(float, line.split())
print(weight * sum(grades)/len(grades))
main()
和sum()
等便捷功能查找平均值。 len()
,map()
,float()
和sum()
都是Python built-in functions。
答案 2 :(得分:0)
这适用于Python 2.7以及3.x。
def main():
total_grade = 0
with open('grades.txt', 'r') as file:
for line in file:
split = line.split(' ')
grades = map(int, split[1:])
line_grade = (sum(grades) / len(grades)) * float(split[0])
print line_grade
total_grade += line_grade
print total_grade
if __name__ == '__main__':
main()