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

Python读取高分文件时,如何按完整数值排序而非仅按首数字?

问题:按完整数值排序高分数据,提取前5名展示

我正在编写代码从外部文件读取高分数据,提取前5名并展示。目前已接近完成,但代码仅识别高分的首数字,导致12这类分数被判定为小于8。请问如何实现按完整数值进行排序?

外部文件 highscore.txt 内容:

('Louis', 18)
('Louis', 4)
('Louis', 2)
('Louis', 4)
('Troy', 0)
('Andre', 6)
('Louis', 1)
('Louis', 17)
('Louis', 3)
('Louis', 9)

当前错误输出:

('Louis', 9)
('Andre', 6)
('Louis', 6)
('Louis', 4)
('Louis', 4)

当前代码:

with open('highscore.txt', 'r') as score_file:
    scores = [line.split(' ') for line in score_file]
scores.sort(key=lambda x: x[1], reverse=True)

print('The highscores are...\n')

for i in range(0, 5):
    print(' '.join(scores[i]))

解决方案

问题根源

你的代码把分数当作字符串排序了。line.split(' ') 分割后,x[1] 是类似'18'、'9'的字符串,字符串比较是按字符逐个对比:'9'的首字符'9'比'18'的首字符'1'大,所以排序结果错误。

修改后的代码

with open('highscore.txt', 'r') as score_file:
    scores = []
    for line in score_file:
        # 清理每行的首尾括号和换行符
        cleaned = line.strip().strip('()')
        # 分割姓名和分数(按", "拆分)
        name_part, score_part = cleaned.split(', ')
        # 去掉姓名的单引号,将分数转为整数
        name = name_part.strip("'")
        score = int(score_part)
        scores.append( (name, score) )

# 按分数降序排序,此时score是整数,排序逻辑正确
scores.sort(key=lambda x: x[1], reverse=True)

print('The highscores are...\n')

# 按原格式输出前5名
for i in range(5):
    name, score = scores[i]
    print(f"('{name}', {score})")

代码说明

  1. 正确解析数据:不再直接按空格分割,而是先清理每行的括号和换行,拆分出姓名和分数后,将分数转换为整数类型。
  2. 整数排序:排序时使用整数类型的分数作为key,确保按数值大小排序。
  3. 还原输出格式:用f-string将姓名和分数拼接回原文件的格式。

正确输出结果

The highscores are...

('Louis', 18)
('Louis', 17)
('Louis', 9)
('Andre', 6)
('Louis', 4)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:48