我手头有Python任务,我想知道你们是否可以指出我正确的方向。到目前为止,我已经完成了这项任务,但是这个似乎有点高级,我周五有一个期中考试将有这个项目的元素,我很乐意为你们添加任何见解您可能认为这对该计划有益。谢谢。
“输入将是一个文本等级文件,在我的情况下我称之为grade_file.py,所以我可以使用IDLE编辑器编辑它,格式如下所示。
COURSE A 4
COURSE B 3
COURSE C 5
COURSE D 5
请注意,每行包含三条信息,以空格分隔。第一个是课程名称,第二个是字母等级,第三个是单元数。为了使等级的数值计算为字母等级中的简单公式,唯一的合法值或字母等级为A,B,C,D和E,数值点值
A 4
B 3
C 2
D 1
E 0
这样E就像我们的F一样,在字母后面不能添加+或 - 。
总数值是通过将单位的乘积加上所有课程的等级数值点的乘积,然后除以单位总数来计算的。
编写一个程序,可以提示用户输入成绩文件的名称,并根据文件中的数据计算GPA。 GPA应打印出小数点右侧正好3个位置。以下是我上面输入数据的程序结果,用户输入为粗体。 (请注意,评分者将使用不同的成绩数据文件,名称不同。)
输入成绩档案的名称:grade_file.py GPA为2.353“
再次感谢你们。
答案 0 :(得分:2)
编辑:更好的版本(也修复了在2.7.x等强制浮动除法的要求。):
from re import findall
GPAG = {"A":4,"B":3,"C":2,"D":1,"E":0}
def calcGPA(ResultStr):
courses = [ dict(zip(["grade","units"],score)) for score in findall(r'COURSE\s(\w)\s(\d+)',ResultStr) ]
print(courses)
unitCount = sum([int(course["units"]) for course in courses])
return sum([GPAG[course["grade"]]*int(course["units"]) for course in courses] )/float(unitCount)
fname = raw_input("Enter the name of the file of grades: ")
with open(fname+".txt") as f:
print("The GPA is: %.3f" % calcGPA(f.read()))
使用文件:
COURSE A 4
COURSE B 3
COURSE C 5
COURSE D 5
产地:
>>>
Enter the name of the file of grades: GPA
The GPA is: 2.353