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

Python字母成绩等级转换问题求助:无法保留重复成绩与输入顺序

问题分析与修复方案

核心问题点

  • 你使用了set()存储输入分数和等级,集合的特性是自动去重且无序,导致重复的等级被合并、输入顺序丢失。
  • 代码最后直接将letters赋值为固定列表['HD', 'D', 'C', 'P', 'F'],完全覆盖了之前计算的结果,这是明显的逻辑错误。
  • 输入的分数是字符串类型,直接和字符串数字比较会出现逻辑偏差(比如字符串"100"会被判定小于"90",因为字符'1'的ASCII码比'9'小)。

修正后的代码

# 用列表存储输入分数和等级,保留顺序与重复项
totals = []
letters = []

# 获取并存储用户输入
print("Please enter the grade for each student, or press q to quit")
while True:
    user_input = input("> ")
    if user_input.lower() == "q":
        break
    # 转换输入为整数,同时处理无效输入
    try:
        score = int(user_input)
        totals.append(score)
    except ValueError:
        print("请输入有效的数字分数!")

# 为每个分数计算对应字母等级
for total in totals:
    if total <= 59:
        letters.append("F")
    elif total <= 69:
        letters.append("P")
    elif total <= 79:
        letters.append("C")
    elif total <= 89:
        letters.append("D")
    else:
        letters.append("HD")

# 按逗号分隔的格式输出结果
print("The GPA for your students is: {}".format(",".join(letters)))

关键修改说明

  1. 替换集合为列表:将totals和letters从set()改为list(),确保保留输入顺序和重复的等级。
  2. 类型转换与输入校验:把用户输入的字符串转为整数int(user_input),保证分数比较逻辑正确;增加try-except捕获非数字输入,避免程序崩溃。
  3. 删除错误赋值:移除了letters = ['HD', 'D', 'C', 'P', 'F']这行覆盖结果的代码,改用append()逐个添加计算后的等级。
  4. 格式化输出:用",".join(letters)将等级列表转为逗号分隔的字符串,匹配你期望的输出格式(如HD,D,D,C)。

内容的提问来源于stack exchange,提问作者Ze_Watermelon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:12:48