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)))
关键修改说明
- 替换集合为列表:将
totals和letters从set()改为list(),确保保留输入顺序和重复的等级。 - 类型转换与输入校验:把用户输入的字符串转为整数
int(user_input),保证分数比较逻辑正确;增加try-except捕获非数字输入,避免程序崩溃。 - 删除错误赋值:移除了
letters = ['HD', 'D', 'C', 'P', 'F']这行覆盖结果的代码,改用append()逐个添加计算后的等级。 - 格式化输出:用
",".join(letters)将等级列表转为逗号分隔的字符串,匹配你期望的输出格式(如HD,D,D,C)。
内容的提问来源于stack exchange,提问作者Ze_Watermelon
相关产品推荐
相关产品推荐

