【问题标题】:Ordering a leaderboard in repl.it在 repl.it 中订购排行榜
【发布时间】:2020-05-05 09:48:41
【问题描述】:

需要订购我在 repl.it 的程序中创建的排行榜。

排序时,目前似乎根据每个条目的第一个数字对其进行排序,因此所有个位数字条目都正确排序,但所有两位数字仅按第一个数字排序,因此例如将 11 排序为低于 2它读作 1。

有什么想法吗?

注意。排行榜存储名称和分数,分数肯定存储为字符串,因此我需要将其更改为到目前为止您的建议中的整数。谢谢你。试图在第二行更改 - file.write(str(score)) - 但告诉我必须是一个字符串而不是 int。帮助?下面这部分的代码。

file = open ("Leaderboard.txt", "a")
file.write(str(score))
file.write(",")
file.write(nickname)
file.write("\n")
file.close()

Leaderboard1 = list()
Leaderboard_unsorted = "Leaderboard.txt"
with open (Leaderboard_unsorted) as fin:
  for line in fin:
    if line[0] != "0":
      Leaderboard1.append(line.strip())
Leaderboard1.sort(reverse = True)

【问题讨论】:

  • 在排序前将值转换为整数...
  • 听起来您的排行榜正在使用字符串作为您尝试排序的值。对字符串 ["3", "25","111"] 进行字符串排序将输出 111,25,3,因为 1 在 2 之前,2 在 3 之前等。如果你想对它们进行数字排序,你需要它们是整数而不是字符串。当然,展示你的代码会让你更容易肯定地告诉你,而不是我们只是猜测
  • 我们缺少关键和基本信息,我确信 repl.it 与问题无关。
  • 谢谢大家。现在已经包含了有问题的代码。关于如何将分数作为字符串更改为整数的任何帮助都会很棒。谢谢!

标签: python leaderboard repl.it


【解决方案1】:

由于您没有显示任何代码,我必须做出有根据的猜测,即您存储的值要排序为字符串而不是整数。因此,在对字符串进行排序时,它们按字符排序。如果您希望它们按数值排序,请将它们存储为 insated 字符串的整数,或者至少告诉您的排序函数将它们视为整数。

scores = ["23", "3", "111"]
print("string sort", sorted(scores))
print("int sort", sorted(scores, key=int))

输出

string sort ['111', '23', '3']
int sort ['3', '23', '111']

但是为了将来,请分享您的代码或至少一个重现您的问题的最小示例

【讨论】:

  • 感谢您的帮助。现在已经用相关代码进行了编辑。只需要弄清楚如何在这段代码中转换为整数
  • 要么将 Leaderboard1.append(line.strip()) 更改为 Leaderboard1.append(int(line.strip())) 以将它们保存为整数。或者您可以将它们保留为字符串,但通过将 Leaderboard1.sort(reverse = True) 更改为 Leaderboard1.sort(reverse = True, key=int) 来告诉 sort 您希望它们按整数排序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多