如何在python中使用messagebox显示时间

如何在python中使用messagebox显示时间,python,windows,Python,Windows,我正在用python设计一个tic-tac-toe游戏,计算用户打败三个关卡所需的时间,然后将此分数保存到名为“Player times.txt”的文件中。我想对每个玩家从低到高的时间进行排名 print('You beaten all three levels and reached the end of the game!') .windll.user32.MessageBoxW(0, "Hooray you've won the game.","Victory", 1) ctypes.wi

我正在用python设计一个tic-tac-toe游戏,计算用户打败三个关卡所需的时间,然后将此分数保存到名为“Player times.txt”的文件中。我想对每个玩家从低到高的时间进行排名

print('You beaten all three levels and reached the end of the game!')
.windll.user32.MessageBoxW(0, "Hooray you've won the game.","Victory", 1)
ctypes.windll.user32.MessageBoxW(0, str(sum1), "Your Score", 1)
#top_score=str(input('Would you like to see the leaderbooard?'))
MyfileWrite = open('Player Times.txt','a')
MyfileWrite.write(file_info + "'s time is " + str(sum1) + '.' + '\n')
MyfileWrite.close()
print('--------------------')
top_score=str(input('Would you like to see the leaderbooard?'))
print('--------------------')
if (top_score=='yes'):
    MyfileWrite = open('Player Times.txt', 'r')
    file_contents = MyfileWrite.read()
    print(file_contents)
    MyfileWrite.close()

这就是当你击败三个关卡时会发生的事情。然后,您可以查看排行榜,但它只打印出写入文件的所有时间。要对这些时间进行排序,我可以做些什么?

幸运的是,您正在编写一个漂亮、整洁的文件,以便于解析。它看起来像这样:

Alice's time is 3.2.
Bob's time is 4.6.
Charlie's time is 4.1.
(empty line)
这意味着我们可以做到:

if top_score.lower().startswith('y'):
    with open('Player Times.txt', 'r') as f:
        print(*sorted(f, key=lambda x: float(x[:-2].split("'s time is ")[1])), sep='')
首先,我们使用score作为排序键对打开的文件进行排序(这是一个iterable,所以我们可以直接进行排序)。我们将使用
lambda
定义一个内联函数,该函数接受一个参数,该参数将是文件中的每一行。分数在字符串
”的时间是“
”之后,在最后两个字符之前,
”\n“
,因此我们切断最后两个字符,在
”的时间是“
”时分割剩余的字符串,并将其转换为
浮点值。将使用此数字确定正确的顺序

这给了我们一些与原始文件对象非常相似的东西:字符串的
列表
,只是这次它们被正确地排序了。很好地打印字符串列表的一种快速方法是使用
*
展开列表,由于每行末尾都有一个换行符,我们将告诉
print()
使用空字符串作为分隔符,而不是通常的空格

结果:

Alice's time is 3.2.
Charlie's time is 4.1.
Bob's time is 4.6.

sorted()
使用的默认升序在这里起作用,但是如果您想从高到低排序(例如,一个有点数的游戏),您可以传递关键字参数
reverse=True
,例如
排序(['a','bbb','cc'],key=len,reverse=True)
生成
['bbb','cc','a']

打印(文件内容)将一直打印出来。您必须以某种方式对时间进行排序并打印所需的时间。我该怎么做?谢谢您的帮助,但我没有收到错误
文件“C:/Python32/Final Year Project/Build 11(Parrell Lists).py”,第316行,打印(*排序(f,key=lambda x:float(x[:-2]),拆分(“'s time is”)[1]),sep='')文件“C:/Python32/最后一年项目/Build 11(Parrell Lists).py”,第316行,印刷(*排序(f,key=lambda x:float(x[:-2]),拆分(“'s time is”)[1]),sep='')索引器:列表索引超出范围
我从
if(top\u score==yes)
注释掉了前面的代码,直到
MyfileWrite.close()
。我应该这样做吗?文本文件是否与我发布的文本文件一模一样,每行包含用户名、字符串
的时间是
、一个数字、一个句点和一个换行符?编辑您的问题,将文本文件的内容包含在一个代码块中。最后运行正常了!您的评论指出了问题所在问题出在之前的代码中,我要求输入一个用户名,然后将用户名写入一个文件,之后时间也会写入该文件。这会产生类似于
ben的结果ben的时间是x
。所以我刚刚注释掉了之前写入文件的代码,它成功了!很高兴听到它!请随意投票/接受这个答案,以表明它解决了问题。