我的代码应该输出游戏的分数,并根据每个玩家的名字和每个玩家的最高分数按字母顺序对它们进行排序,仅从该玩家的最后 3 个分数中获取分数。
直到得分达到 10 分(这是您在游戏中可以获得的最高得分)为止,它都可以正常工作。我认为这与分数是两位数而不是一位数有关。
def alpha():
d = collections.defaultdict(lambda: collections.deque(maxlen=3))
with open("scores.txt" as f:
for line in f:
player,score = line.strip().split(":")
d[player].append(score)
for k in sorted(d):
values = max(d[k])
print(k + " " + " ".join(map(str, values)))
有谁知道是什么原因造成的吗? 我使用的是 python 3.3.2。
这是我的文本文件:
Aaron:1
Ronnie:10
Ronnie:2
Ronnie:4
Aaron:5
Vick:6
Vick:9
Vick:2
Andy:5
最佳答案
您存储的是字符串分数而不是整数分数,因此,它们将作为字符串进行比较。由于字符串比较是按字典顺序进行的,"10" < "9"
是 True
"10" < "2"
也是如此依此类推,因此您的代码在 2 位数字上失败,因为比较不正确。
要纠正此问题,请将分数转换为整数并替换此行
d[player].append(score)
这样:
d[player].append(int(score))
关于python - defaultdict无法识别python中的2位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29450567/