,我们梳理了Python中关于字典排序的一些常用方法(杂乱无章的数据结构如何进行排序,简明讲述Python字典排序那些事)。其中,我们讲到了Python的collections模块中的OrderedDict类。今天,我们来使用它模拟一个简单的竞速游戏的排名的操作。
实例分析
我们知道,在现实生活中有很多竞速比赛,比如,汽车竞速、游戏比赛竞速、体育竞速等等。这类比赛通常是以选手完成比赛的时间来进行排名的,完成比赛需要所用越短,选手的排名越靠前。今天,我们使用Python来模拟一个竞速比赛。
竞速项目模拟编程实现
首先,我们创建一个比赛选手列表
importstring
player_lst=list(string.ascii_lowercase)#创建26个选手代号列表
我们再来创建一个OrderedDict用来记录每一个选手比赛的耗时信息。
scroe_dict=OrderedDict()
然后,我们梳理一下程序要如何记录比较过程及每一个选手的比赛信息。
比赛开始,为每一名选手确定一个开始时间,程序等待每一名选手完成比赛,这个比赛过程我们就不用程序模拟了,直接使用input()等待响应,当我们按下任意键后,假设一个随机选手完成比赛。同时,我们将该选手移出比赛队列,记录选手比赛所用的时间,并将选手名次和比赛耗时计入到score_dict中,依次执行,直到比赛结束。
竞速游戏程序实现如下:
#计时开始比赛
start=time()
foriinrange(len(player_lst)):
input(按任意键随机产生一名参赛者成绩)
#比赛完成后弹出列表
pop_p=player_lst.pop(randint(0,25-i))
#记录完成时间
end=time()
#成绩添加进字典中
scroe_dict[pop_p]=(i+1,end-start)
这样,我们就将选手比赛的名次和耗时信息添加到了OrderedDict字典中。
最后,我们运行程序后打印该字典看下结果。
forkeyinscroe_dict:
print(第{0}名:姓名{1},成绩为{2:.2f}.format(scroe_dict[key][0],key,scroe_dict[key][1]))
我们来看一下比赛的具体排名信息,粘贴打印信息如下:
第1名:姓名c,成绩为3.26
第2名:姓名i,成绩为4.11
第3名:姓名x,成绩为4.82
第4名:姓名q,成绩为5.29
第5名:姓名n,成绩为5.69
第6名:姓名v,成绩为6.03
第7名:姓名h,成绩为6.31
第8名:姓名u,成绩为6.54
第9名:姓名s,成绩为6.77
第10名:姓名w,成绩为6.96
第11名:姓名m,成绩为7.15
第12名:姓名a,成绩为7.37
第13名:姓名j,成绩为7.59
。。。
成功模拟了竞速比赛项目,当然,需要说明的是选手排名次序是随机产生的,下一名选手耗时取决于我们按键的频率。
总结
我们成功模拟了一个竞速比赛,作为一个练手小项目,主要是让大家熟悉一下OrderedDict的使用及其优点,作为字典,它可以按照进入字典的次序主动对字典内元素进行排序,减少了排序代码量。类似项目,建议使用OrderedDict这种数据结构。这个项目的目的是让大家掌握类似程序的编写方式,如果可以,这个思路可以运用到我们的竞速游戏开发中。
思路可用于游戏开发后续会推出更有意思的内容,欢迎大家持续