如何在python中使用messagebox显示时间
我正在用python设计一个tic-tac-toe游戏,计算用户打败三个关卡所需的时间,然后将此分数保存到名为“Player times.txt”的文件中。我想对每个玩家从低到高的时间进行排名如何在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
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
。所以我刚刚注释掉了之前写入文件的代码,它成功了!很高兴听到它!请随意投票/接受这个答案,以表明它解决了问题。