Python成绩转等级程序try-catch逻辑错误调试求助
Python成绩等级判定代码问题排查与修复
你的代码每次都触发bad score是因为存在几个关键错误:
类型不匹配导致的异常:
input()获取的内容是字符串类型,直接拿inp和浮点数(比如0.00、0.90)做大小比较会触发TypeError,直接进入except块输出错误。而且你写的float(inp >= 0.00)是完全错误的写法——先做字符串和数字的比较本身就非法,再转成float也没有意义。未正确存储转换后的数值:就算转换成功,你也没把转好的浮点数存下来,后续的条件判断还是在用字符串和数字比,必然报错。
异常捕获范围太广:
except:会捕获所有异常,包括逻辑错误,不利于排查问题,应该针对性捕获输入无法转成浮点数的ValueError。
修正后的代码
inp = input('enter score: ') try: # 先把输入转换为浮点数并存储 score = float(inp) # 先判断分数范围是否合法 if not (0.0 <= score <= 1.0): print('bad score') else: # 根据分数判定等级 if score >= 0.90: grade = 'A' elif score >= 0.80: grade = 'B' elif score >= 0.70: grade = 'C' elif score >= 0.60: grade = 'D' else: grade = 'F' print('Grade: ', grade) # 仅捕获输入无法转换为数字的异常 except ValueError: print('bad score')
关键修正点说明
- 先将输入字符串转换为浮点数并存储为变量
score,后续所有判断都基于这个数值变量。 - 单独做范围校验,不在0-1区间内直接输出错误;范围合法再进入等级判定逻辑。
- 将宽泛的
except:改为except ValueError:,只捕获输入不是有效数字的异常,避免误判逻辑类错误。
内容的提问来源于stack exchange,提问作者Dajeon Reich
相关产品推荐
相关产品推荐

