Python字母成绩转数值函数咨询:需正确返回对应成绩数值
字母成绩转数值代码优化方案
原代码实现
字母成绩对应数值
A = 95 B = 85 C = 75 D = 65 E = 55 F = 0
获取用户输入成绩
grade = input('Enter your grade: ') grade = str(grade)
返回成绩数值的函数(整型)
def grade_value(user_grade): if user_grade == 'A': return A elif user_grade == 'B': return B elif user_grade == 'C': return C elif user_grade == 'D': return D elif user_grade == 'E': return E elif user_grade == 'F': return F else: return('Error: Invalid grade')
调用函数并打印结果
value = grade_value(grade) if isinstance(value, int): print(f"The value of {grade} is {value}") else: print(value)
确保代码正确返回数值的改进措施
1. 标准化输入格式,兼容大小写和冗余空格
原代码仅匹配大写字母,用户输入小写a或带空格的 A都会触发错误,先对输入做清洗处理:
grade = input('Enter your grade: ').strip().upper() # input本身返回字符串,无需额外转str;strip()去前后空格,upper()统一转为大写
2. 用字典替代全局变量,避免命名冲突且更易维护
全局变量容易引发意外修改,用字典映射成绩与数值更安全,还能大幅简化函数逻辑:
# 替换原来的单个变量定义 GRADE_MAP = { 'A': 95, 'B': 85, 'C': 75, 'D': 65, 'E': 55, 'F': 0 } def grade_value(user_grade): return GRADE_MAP.get(user_grade, 'Error: Invalid grade')
后续修改成绩对应值时,只需调整字典内容,无需修改函数内的if-elif分支。
3. 统一错误处理逻辑,避免返回类型混乱
原函数正常返回整数、错误返回字符串,虽调用时做了类型判断,但用异常处理更符合Python规范:
def grade_value(user_grade): try: return GRADE_MAP[user_grade] except KeyError: raise ValueError('Error: Invalid grade') # 调用时捕获异常 try: value = grade_value(grade) print(f"The value of {grade} is {value}") except ValueError as e: print(e)
4. 增加输入合法性预检查
在调用函数前先过滤明显无效的输入,比如非单字母内容:
grade = input('Enter your grade: ').strip().upper() if not grade.isalpha() or len(grade) != 1: print('Error: Please enter a single letter grade (A-F)') else: try: value = grade_value(grade) print(f"The value of {grade} is {value}") except ValueError as e: print(e)
5. 覆盖性测试验证
手动测试以下场景,确保所有情况都能正确处理:
- 输入大写字母A-F
- 输入小写字母a-f
- 输入带空格的
B - 输入无效字符如
G、1、AB - 输入空值(直接回车)
内容的提问来源于stack exchange,提问作者Gato_das_Botas
相关产品推荐
相关产品推荐

