Python如何限制裁判打分为7个1-10范围内数值 现有代码运行异常
问题分析
- 核心逻辑缩进错误:分数验证、成绩计算的全部代码都放在了
except ValueError异常捕获块内,只有当输入转浮点数报错时才会触发执行,且except块第一行就写了continue,后续所有校验、计算代码完全无法运行。 - 缺少打分数量校验:没有判断录入的分数数量是否等于7,不符合需求里7名裁判打分的要求。
- 分数范围校验逻辑错误:将存储分数的列表直接转成字符串和数字做大小比较,逻辑完全不成立,应当遍历列表逐一校验每个分数是否在1-10区间内。
- 异常提示逻辑错误:
except块内先执行continue直接跳出当前循环,后续的错误提示语句永远不会被执行,用户看不到输入错误的提醒。
修正后完整代码
import statistics def check_continue(): response = input('是否需要录入其他运动员的成绩?[y/n] ') if response == 'n': return False elif response == 'y': return True else: print('请输入正确的选项 [y/n]') return check_continue() while True: name = input('请输入运动员姓名:') if name.strip() == "": print("姓名不能为空,请重新输入") continue # 处理分数录入与格式校验 try: print("请输入7名裁判的打分,分数之间用空格分隔:") scores = [float(i) for i in input().strip().split()] except ValueError: print("请输入有效的数字格式分数") continue # 校验分数数量是否符合要求 if len(scores) != 7: print("错误:必须录入恰好7名裁判的打分,请重新输入") continue # 校验每个分数的数值范围 valid = True for s in scores: if s < 1 or s > 10: valid = False break if not valid: print("错误:所有分数必须在1-10的区间内,请重新输入") continue # 计算最终成绩 print("_______________________________________________________________________________") print(f"运动员姓名:{name}") print(f"裁判打分:{scores}") scores.remove(max(scores)) scores.remove(min(scores)) final_score = statistics.mean(scores) print(f"最终得分:{round(final_score, 2)}") if not check_continue(): break
内容的提问来源于stack exchange,提问作者Leith
相关产品推荐
相关产品推荐

