GPA Python分配

时间:2013-05-01 07:04:57

标签: python

我手头有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“

再次感谢你们。

1 个答案:

答案 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