You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 07:54:06