我正在制作一个愚蠢的小游戏,将你的得分保存在highscores.txt文件中。
我的问题是排序。这是我到目前为止所拥有的。
也许python的字母数字排序器会有帮助吗?感谢。
import os.path
import string
def main():
#Check if the file exists
file_exists = os.path.exists("highscores.txt")
score = 500
name = "Nicholas"
#If the file doesn't exist, create one with the high scores format.
if file_exists == False:
f = open("highscores.txt", "w")
f.write('Guppies High Scores\n1000..........Name\n750..........Name\n600..........Name\n450..........Name\n300..........Name')
new_score = str(score) + ".........." + name
f = open("highscores.txt", "r+")
words = f.readlines()
print words
main()
答案 0 :(得分:4)
在words = f.readlines()
之后,请尝试以下内容:
headers = words.pop(0)
def myway(aline):
i = 0
while aline[i].isdigit():
i += 1
score = int(aline[:i])
return score
words.sort(key=myway, reverse=True)
words.insert(0, headers)
密钥(;-)的想法是创建一个函数,从每个项目(这里是一行)返回“排序键”。我试图以最简单的方式编写它:查看有多少前导数字,然后将它们全部转换为int,然后返回。
答案 1 :(得分:1)
我想鼓励您以更强大的格式存储您的高分。特别是我建议使用JSON。
import simplejson as json # Python 2.x
# import json # Python 3.x
d = {}
d["version"] = 1
d["highscores"] = [[100, "Steve"], [200, "Ken"], [400, "Denise"]]
s = json.dumps(d)
print s
# prints:
# {"version": 1, "highscores": [[100, "Steve"], [200, "Ken"], [400, "Denise"]]}
d2 = json.loads(s)
for score, name in sorted(d2["highscores"], reverse=True):
print "%5d\t%s" % (score, name)
# prints:
# 400 Denise
# 200 Ken
# 100 Steve
使用JSON将使您不必编写自己的解析器来从保存的文件(如高分表)中恢复数据。你可以把所有东西塞进一本字典中,然后轻而易举地把它全部收回来。
请注意,我藏了一个版本号,即高分保存格式的版本号。如果您更改了数据的保存格式,那么拥有版本号将是一件非常好的事情。
答案 2 :(得分:0)
当你从Alex的答案中粘贴时我猜错了,所以这里有你的代码
import os.path
def main():
#Check if the file exists
file_exists = os.path.exists("highscores.txt")
score = 500
name = "Nicholas"
#If the file doesn't exist, create one with the high scores format.
if file_exists == False:
f = open("highscores.txt", "w")
f.write('Guppies High Scores\n1000..........Name\n750..........Name\n600..........Name\n450..........Name\n300..........Name')
new_score = str(score) + ".........." + name +"\n"
f = open("highscores.txt", "r+")
words = f.readlines()
headers = words.pop(0)
def anotherway(aline):
score=""
for c in aline:
if c.isdigit():
score+=c
else:
break
return int(score)
words.append(new_score)
words.sort(key=anotherway, reverse=True)
words.insert(0, headers)
print "".join(words)
main()
答案 3 :(得分:0)
你想要的可能是通常所说的“自然分类”。搜索“自然排序python”会产生很多结果,但对ASPN进行了一些很好的讨论。