Python新手编写100题测试正确率统计代码运行报错求解决方案
问题排查与修复方案
你的代码存在两个核心问题导致运行失败:
- 得分计算逻辑完全错误
你写的math.ceil(correct_answers / NUMBER_OF_QUESTIONS)计算出来的结果只能是0或者1(比如答对80题就是0.8,向上取整为1),根本匹配不到后面50、70的评级阈值。你要算的是百分比得分,应该乘以100,修改为math.ceil(correct_answers / NUMBER_OF_QUESTIONS * 100)即可。 - 变量作用域问题
final_result只在try语句的else分支中定义,如果用户输入的不是合法整数,触发异常分支后final_result根本不存在,后面的if判断访问这个变量就会直接报错。要把后续的评级判断逻辑挪到else块内部,或者提前给final_result设置默认值。
另外可以额外补充负数输入的校验,避免逻辑漏洞。
修复后完整可运行代码
import math def get_score(correct_answers, NUMBER_OF_QUESTIONS): if correct_answers > NUMBER_OF_QUESTIONS: raise ValueError("答对题数不能超过总题数") if correct_answers < 0: raise ValueError("答对题数不能为负数") # 计算百分制得分 return math.ceil(correct_answers / NUMBER_OF_QUESTIONS * 100) NUMBER_OF_QUESTIONS = 100 try: correct_answers = int(input("你这次测试答对了多少题? ")) except ValueError as err: print("输入不合法,请输入整数") else: final_result = get_score(correct_answers, NUMBER_OF_QUESTIONS) # 评级逻辑挪到else块内,保证只有输入合法时才运行 if final_result <= 50: print("你还需要多加复习。") elif 50 < final_result <= 70: print("表现还不错,再多复习下就能拿更高分了!") else: print("表现太棒了,恭喜!")
内容的提问来源于stack exchange,提问作者hilal123
相关产品推荐
相关产品推荐

