调试成绩转换Python程序:非0-100输入无法触发重新输入
成绩转换程序调试修复方案
问题根源
原程序无法拦截非法输入的核心问题出在输入合法性判断的逻辑运算符错误:
- 原代码用了
if (input_grade >= 0 ) or (input_grade <= 100),这个条件对任何整数都成立(比如输入-5,满足<=100;输入105,满足>=0),导致循环直接终止,完全起不到校验作用。 - 同时缺少非法输入的错误提示,且成绩转换、输出逻辑没有限制在合法输入分支内,非法输入时也会执行输出,出现无效结果。
修复后的代码
# 成绩转等级程序 input_bool = False while not input_bool: input_grade = int(input("请输入要转换的成绩(0-100):\n")) # 修正合法性判断逻辑,仅允许0-100的成绩 if 0 <= input_grade <= 100: input_bool = True # 成绩转换与输出仅在输入合法时执行 output_grade = "" if input_grade <= 34: output_grade = "F" elif input_grade <= 39: output_grade = "MF" elif input_grade <= 49: output_grade = "D" elif input_grade <= 59: output_grade = "C" elif input_grade <= 69: output_grade = "B" elif input_grade <= 79: output_grade = "A-" elif input_grade <= 89: output_grade = "A" else: # 剩余区间为90-100 output_grade = "A+" print(f"{input_grade} = {output_grade}.") else: # 添加非法输入的错误提示 print("输入无效!成绩必须在0到100之间,请重新输入。")
关键改动说明
- 把合法性判断的
or改为and(或更简洁的0 <= input_grade <=100),确保只有合法输入才会终止循环。 - 将成绩转换和输出逻辑移到合法输入的分支内,避免非法输入时执行无效输出。
- 新增
else分支,当输入非法时给出明确提示,引导用户重新输入。 - 简化成绩区间判断,利用前面的
elif过滤掉更小区间,后续判断无需重复写下限,代码更简洁。
内容的提问来源于stack exchange,提问作者ripper2310
相关产品推荐
相关产品推荐

