-3

我手头有一个 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"

再次感谢各位。

4

1 回答 1

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
于 2013-05-01T07:34:07.050 回答