def storescores():
with open("hst.txt") as hs:
lines = list(hs)
lines.append(name + " " + score + "\n")
lines = lines[-10:]
with open("hst.txt", "w") as hs:
for line in lines:
hs.write(line)
def storescores():
with open("hst.txt") as hs:
lines = list(hs)
lines.append(name + " " + score + "\n")
lines.sort(key=lambda line: int(line.split()[-1]))
lines = lines[-10:]
with open("hst.txt", "w") as hs:
for line in lines:
hs.write(line)
做这样的事没有内在的方法。你需要做的是
首先,无论您做什么,都需要从文件中读取最多10行。你知道吗
如果你只想保留前10个分数,然后停止记录新的分数,那很简单。为了提高效率,我将使用^{} 模块(因此,如果您连续调用
storescores
1000次,它将记住它已经在查找第10行了,但是没有找到第10行)。如果少于10行,则返回空字符串;如果有10行或更多行,则返回第10行。所以:如果你想要最新的10分,你就必须把每一行读出来,然后写一个新的文件。像这样:
如果你想要Tope>EEM > 10分,你可以做同样的事情,但是在中间添加一个排序步骤。没有理由写一个显式的选择排序或冒泡排序,事实上,你不想,因为这些都不是很好的排序算法放在首位。只需调用列表上的
sort
方法。你知道吗棘手的一点是,您希望在分数上排序,而不是整行(否则“Bob 100”的分数比“Andrew 200”高),并且在分数上排序为数字而不是字符串(否则,“2”的分数比“10”高)。因此,需要一个key function来拆分字符串,获取最后一位,并将其转换为数字。所以:
有一些方法可以进一步改进这一点。例如,与原地重写文件不同,您可能希望写入一个新的临时文件,然后在完成后将其复制到该文件上(因此,如果有人在您的程序运行过程中拔出插头,您将得到旧的分数或新的分数,而不是截断的部分文件)。或者您可能希望以最聪明的方式使用^{} 或^{} 模块,将新的分数放入其适当的排序位置,而不是重新排序整个已排序的列表(当只有10个条目时,这并不重要)。等等。但这足以让你开始。你知道吗
相关问题 更多 >
编程相关推荐