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

如何实现输入学生roll与CGPA字典并仅按值排序(保留键值对)

按CGPA降序排序学生字典并保留学号对应关系的代码修正

我来帮你修正这段代码,完美实现按CGPA降序排序同时保留学号与成绩对应关系的需求。先看看原代码里的几个问题:

  • 输入学号时没把输入值赋值给roll变量,运行时会直接报NameError
  • 使用sorted()函数时参数写错了:你用了roll作为参数名,正确应该是key;而且原代码是按学号(键)排序,不是按CGPA(值)排序
  • 输入的CGPA是字符串类型,直接排序会出现数值排序错误(比如字符串"4"会排在"4.2"前面)

下面是修正后的完整代码:

dic = {}
n = True
while n:
    roll = input("Insert roll: ")  # 给roll变量赋值,修复未定义错误
    cgpa = float(input("Insert Your cgpa: "))  # 转换为浮点型,确保数值排序逻辑正确
    dic[roll] = cgpa
    repeat = input("Want To add more? :")
    if repeat.lower() == 'no':  # 兼容大小写输入,提升用户体验
        n = False

# 按CGPA降序排序,严格保留学号与成绩的对应关系
sorted_d = dict(sorted(dic.items(), key=lambda kv: kv[1], reverse=True))

# 格式化打印排序后的结果
print("\n排序后的学生成绩:")
for roll, cgpa in sorted_d.items():
    print(f"{roll}: {cgpa}")

关键修正点说明:

  • 修复学号输入问题:给roll变量添加赋值操作,彻底解决未定义变量的报错
  • CGPA类型转换:把输入的CGPA转成float类型,确保排序时是按数值大小比较,而非字符串字典序
  • 正确使用sorted()函数:
    • 用key=lambda kv: kv[1]指定按字典的值(CGPA)排序
    • 添加reverse=True实现降序排列,完全匹配你期望的输出顺序
  • 兼容大小写输入:用repeat.lower() == 'no'处理用户输入的大小写,比如用户输入"No"或"NO"都能正确结束循环

输入示例与输出:

输入流程:
Insert roll: 1
Insert Your cgpa: 3
Want To add more? :yes
Insert roll: 2
Insert Your cgpa: 4.5
Want To add more? :yes
Insert roll: 3
Insert Your cgpa: 4
Want To add more? :yes
Insert roll: 4
Insert Your cgpa: 4.2
Want To add more? :no

输出结果:
排序后的学生成绩:
2: 4.5
4: 4.2
3: 4
1: 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:10:13