Python平均分与等级计算器异常:始终输出A等级求助
问题排查与修复建议
1. 全局变量未正确声明
你在calc_average函数中修改testScores时,没有添加global testScores声明,导致函数内部创建了一个局部的testScores变量,而全局的testScores始终保持初始值0。这就意味着determine_grade函数判断的是全局的0,而非你计算出的真实平均分。
2. 条件判断逻辑错误
就算全局变量问题解决,你的等级判断用错了逻辑运算符:所有条件都用了or,比如第一个条件testScores <= 100 or testScores >= 90——只要分数满足任意一个条件就会触发,而正常测试分数必然≤100,所以无论平均分是多少,都会直接进入第一个分支输出"A"。正确逻辑应该用and来限定区间范围。
修正后的代码
testScores = 0 def main(): calc_average() determine_grade() def calc_average(): global testScores # 声明要修改全局变量 firstTest = float(input('Enter your first score: ')) secondTest = float(input('Enter your second score: ')) thirdTest = float(input('Enter your third score: ')) forthTest = float(input('Enter your forth score: ')) fifthTest = float(input('Enter your fifth score: ')) addedTestScores = firstTest + secondTest + thirdTest + forthTest + fifthTest testScores = addedTestScores / 5 print('This is your average: ', testScores) def determine_grade(): global testScores if 90 <= testScores <= 100: print('You have an A') elif 80 <= testScores < 90: print('You have a B') elif 70 <= testScores < 80: print('You have a C') elif 60 <= testScores < 70: print('You have a D') else: print('You have an E') main()
额外优化建议
避免使用全局变量,改用函数返回值传递数据,代码更清晰且无副作用:
def main(): average = calc_average() determine_grade(average) def calc_average(): scores = [] for i in range(5): score = float(input(f'Enter your {i+1}th score: ')) scores.append(score) average = sum(scores) / 5 print('This is your average: ', average) return average def determine_grade(average): if 90 <= average <= 100: print('You have an A') elif 80 <= average < 90: print('You have a B') elif 70 <= average < 80: print('You have a C') elif 60 <= average < 70: print('You have a D') else: print('You have an E') main()
内容的提问来源于stack exchange,提问作者elizabethgleigh
相关产品推荐
相关产品推荐

