首页 > 解决方案 > 我如何制作代码来保存这个猜数字游戏的前 5 名分数?

问题描述

from random import *

tries = 0

guessNum = randint(1,1000)

while True:

guess = int(input("Guess a number between 1-1000: "))
print("You have",29-tries,"tries left.")    
if guess >= guessNum+1:
    print("Too high")
    tries += 1
elif guess <= guessNum-1:
    print("Too low")
    tries += 1
if guess == guessNum:
    print("You got it right!!")
    tries += 1
    print("It took you",tries,"tries.")
    f = open("scoreBoard.txt","a")
    f.write("%-s,%-s\n" %(tries,guessNum))
    f.close()
    break
if tries == 30:
    print("You failed, the number was:",guessNum,".")
    break

我需要帮助将其放入记分牌中,如果有新的高分,记分牌会更新。我知道如何将这些内容附加到 txt 文件中,但我应该如何对其进行编码以使其只有前五名的分数?

标签: python

解决方案


您首先要将分数存入内存。你可以很容易地用一个列表来做到这一点。

highscores = [0]*5

现在,当您获得新分数时,您希望将其放入列表中的正确位置。假设列表中的第一项是最低的,最后一项是最高的。现在我们可以编写一个函数,将高分附加到列表中,对其进行排序,然后返回 5 个最高分。

def place_highscores(score: int, highscore_list: list):

    size = len(highscore_list)
    highscore_list.append(score)
    highscore_list.sort()
    highscore_list = highscore_list[-size:]

    return highscore_list

现在,您可以通过调用此函数简单地将新的高分放入记分板:

>>>highscores = [1, 2, 3, 5, 5]
>>>highscores = place_highscores(4, highscores)
>>>print(highscores)
[2, 3, 4, 5, 5]

一旦您想保存数据,您可以将其写入文件。您可以直接以您自己的格式执行此操作,您可以使用 pickle 或 json,我更喜欢它,因为该扩展程序带有 python 并且非常易于使用:

import json

dict = {
    "highscores": highscores
}

with open("path/to/file", w) as file:
    json.dump(dict, file, indent=4)

这是 json 的一些文档:https ://www.geeksforgeeks.org/json-dump-in-python/


推荐阅读