我可以做些什么来修复我用python开发的这个GPA计算器

2024-05-08 02:17:18 发布

您现在位置:Python中文网/ 问答频道 /正文

这里有一个简单的问题,我对python还相当陌生,必须编写一个脚本来弹出给定等级集的GPA。问题是,这段代码是有效的,但以gpa(“AB”)的形式,一旦它获得了2个以上的输入,它就会失去正常状态,“AB”=3.5到“AAB”=2.33,显然不是这样。我能做些什么来解决这个问题

def gpa(grade):
    letter = list(grade)
    points = 0
    if 'A' in letter:
        points = points + 4.0
    if 'B' in letter:
        points = points + 3.0
    if 'C' in letter:
        points = points + 2.0
    if 'D' in letter:
        points = points + 1.0
    if 'F' in letter:
        points = points + 0.0
    total = (points)/len(letter)
    return total

2条回答

既然你已经有了一个很好的答案,我将提供不必要的一行:

gpas = "FDCBA"
def gpa(grade):
    points = sum( gpas.index(letter) for letter in grade )
    return points/len(grade)

print(gpa('AB')) # output: 3.5

您需要检查每个等级,然后为该等级添加分数。您可以使用类似于j1-leeif-else梯形图来完成此操作,也可以使用将每个字母映射到其分数的词典:

def gpa(grades):
    grade_to_point = {"A": 4., "B": 3., "C": 2., "D": 1.}
    total = 0.
    for letter in grades:
        total += grade_to_point.get(letter, 0.) # Get the value from the dict. 0 if letter wasn't found in the dict
    return total / len(grades)

如果您愿意,可以使用sum()函数和生成器表达式对其进行pythonize

def gpa(grades):
    grade_to_point = {"A": 4., "B": 3., "C": 2., "D": 1.}
    return sum(grade_to_point.get(letter, 0.) for letter in grades) / len(grades)

相关问题 更多 >