我目前正在为我的学校编程项目做一个骰子游戏,其中包括规则:“在外部文件中存储获胜者的分数及其姓名”和“显示外部文件中前5名获奖分数的分数和玩家姓名”。除了排行榜,我在游戏中做了所有事情。我能够将用户的姓名和分数写入txt文件,但我不确定如何对其进行排序,我还希望当人们第一次启动程序时,可以使用菜单进入排行榜,然后读取txt文件并按顺序打印前5名分数,包括姓名。 我已经检查了大量类似于我的问题,但是没有一个问题对我的代码起作用,因为我不断地在我的代码中出现错误,这些错误与我的布局不兼容
(deleted)
提前感谢,我从来没有使用堆栈溢出来提问,所以如果我的帖子中有任何错误,我向您道歉
你在这个问题上做得很好。您清楚地说明了问题,最重要的是,您添加了足够的代码来运行代码,这样我们就可以了解程序的运行方式以及出现的问题。在这种情况下,没有什么是错的,这是好的:)
考虑到你提到这是一个学校项目,我不会给你一个完整的复制/粘贴解决方案,但希望能解释足够的细节,如何解决这个问题
现在根据这个问题,你不知道如何排序你的排行榜。我自己运行了几次这个程序(因为我不耐烦,所以在取消睡眠之后)😋) 并查看您的排行榜文件如下所示:
要显示此信息,必须执行两项操作:
第一步似乎是您已经知道的,因为您已经使用了
open()
来写入文件如果您是编程新手,那么下一步就不那么明显了。文件被读取为文本数据,您需要按数字对其进行排序。对于计算机而言,文本
"10"
与数字10
不同(请注意引号)。您可以通过打开Python shell来尝试这一点:文本和数字的排序不同,所以你可以把文本转换成数字
您还将以行的形式获取数据(使用
readlines()
或splitlines()
,具体取决于您的使用方式。这些行需要拆分为分数和名称。文件中的模式如下:请务必注意,文本
" - "
作为两个(包括空格)之间的分隔符。请查看Python函数str.split()
和str.partition()
。这些函数可以应用于任何文本值:您可以使用此选项将线路“切割”为多个部分
完成此操作后,您必须记住前面关于将文本转换为数字的一点
作为最后一步,您需要对值进行排序
读取文件时,可以将转换后的数据加载到Python列表中,然后对其进行排序
一个方便的解决方案是创建一个列表,其中该列表的每个元素都是一个带有字段
(score, name)
的元组最后,在排序之后,您可以将其打印到屏幕上
总之
一些总体思路
您可以通过使用更多函数来改进和简化代码
你已经展示了你知道如何使用函数。但是看看注释
#THIS IS ROUND1
到#THIS IS ROUND5
。每一轮的代码行都是相同的。通过将这些行移动到函数中,你将节省大量的代码。这有两个好处:你只需要对代码进行更改(改进或修复)在一个地方。其次,您保证所有块的行为相同为此,您需要考虑块需要哪些变量(这些变量将是新的函数参数)以及结果(即函数返回值)
一个简单的重复示例:
用函数重写
正如您所看到的,第二段代码要短得多,并且没有更多的重复。您的代码将有更多的函数参数。在编程中,以这样一种方式组织代码是一个挑战,即函数只有很少的参数,并且没有复杂的返回值。尽管当它工作时,没有人会看得太近;)
询问密码的安全方式
您可以使用模块
getpass()
中的getpass()
以安全的方式提示输入密码:但是请注意,如果您使用的是PyCharm,则会导致一些问题,这些问题超出了本文的范围。在这种情况下,坚持使用
input()
睡觉
“sleep()”调用很好,可以让您有机会跟踪程序,但测试程序时要慢一些。考虑使用较小的值(逗号值是可能的),或者,甚至更好地,编写您自己的函数,您可以“短路”进行测试。大概是这样的:
然后,您可以随时使用自己的
sleep()
函数等待。这样,您只需将变量ENABLE_SLEEP
设置为False
,代码就会快速运行(用于测试)相关问题 更多 >
编程相关推荐