You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python GPA计算函数遇非指定数据类型时如何实现错误返回?

如何在Python的GPA计算函数中实现错误返回功能?

针对你提出的calGPAbyLetter函数需求,我们需要处理三类错误场景:传入非字符串类型参数、科目数量超过10门或为空、包含非指定成绩等级(A/B/C/D/F以外的字符)。下面是完整的实现方案,附带详细解释:

核心思路

我们需要在计算GPA前依次完成三项校验,任何一项不通过就返回'Error';全部校验通过后再计算并返回GPA值。具体步骤:

  • 先检查输入参数是否为字符串类型,不符合直接返回错误
  • 将输入字符串按空格分割为成绩列表,过滤掉多余空格
  • 检查成绩数量是否在1~10之间,超出范围返回错误
  • 检查每个成绩是否属于允许的等级集合,存在非法等级返回错误
  • 计算总分并除以科目数,按示例要求保留合理的小数位数

完整函数实现

def calGPAbyLetter(letters):
    '''
    (str) -> float OR str
    接收所有成绩等级字母(限10门科目)并计算GPA。成绩等级仅可为A、B、C、D或F。
    >>> calGPAbyLetter("A A A B")
    3.75
    >>> calGPAbyLetter("A B B B")
    3.25
    >>> calGPAbyLetter("A B B B A C F A D ")
    2.67
    >>> calGPAbyLetter("A A A A B B B A C F A D F")
    'Error'
    >>> calGPAbyLetter("A A A A B C F A D F")
    2.6
    >>> calGPAbyLetter("S A B C F A D F")
    'Error'
    '''
    # 定义成绩与分数的映射关系
    grade_map = {'A': 4.0, 'B': 3.0, 'C': 2.0, 'D': 1.0, 'F': 0.0}
    
    # 校验1:输入必须是字符串类型,处理非指定数据类型的情况
    if not isinstance(letters, str):
        return 'Error'
    
    # 分割字符串为成绩列表,自动忽略多余空格(包括开头、结尾的空格)
    grades = letters.split()
    
    # 校验2:科目数量必须在1-10之间
    if len(grades) < 1 or len(grades) > 10:
        return 'Error'
    
    # 校验3:所有成绩必须是指定的合法等级
    for grade in grades:
        if grade not in grade_map:
            return 'Error'
    
    # 计算总分和GPA
    total_points = sum(grade_map[grade] for grade in grades)
    gpa = total_points / len(grades)
    
    # 根据示例格式调整小数位数:整数保留为float,一位小数的保留一位,否则保留两位
    if gpa.is_integer():
        return float(gpa)
    elif gpa * 10 % 1 == 0:
        return round(gpa, 1)
    else:
        return round(gpa, 2)

# 自动测试示例
if __name__ == "__main__":
    import doctest
    doctest.testmod()

关键细节解释

  1. 非指定数据类型处理:通过isinstance(letters, str)判断输入类型,若传入数字、列表等非字符串参数,直接返回'Error',避免后续代码引发报错。
  2. 成绩列表处理:使用split()而非split(' '),能自动过滤字符串中多余的空格,比如输入末尾带空格、中间多空格的情况都能正确分割出成绩。
  3. 等级合法性校验:遍历每个成绩,只要发现一个不在grade_map中的等级,立即返回错误,无需继续后续计算。
  4. GPA格式适配:通过判断小数部分的特征,返回和示例一致的格式(比如2.6而非2.60,2.67而非2.666...),保证输出的可读性。

内容的提问来源于stack exchange,提问作者Naruethep Khanijoh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:38:12