我在这里创建骰子游戏。到目前为止,我已经创建了这个游戏来询问有多少玩家,并将每个玩家的分数保存在字典中。
现在,我想使用该分数并在玩家之间进行比较,因此在游戏结束时,每个玩家都会知道自己的排名。
我希望这样的东西可以打印出“第五名:迈克”,“第六名:史蒂夫:”。我真的不知道该怎么做。希望你们能帮助我,这是代码。
from random import randint
def main():
player = int(input('How many players> '))
step = 1
player += 1
player_dict = {}
scores_dict = {}
for pl in range(1, player, step):
player_name = input(f'Player {str(pl)} name> ') # Get players name from user input
player_dict[pl] = player_name
for x in player_dict:
score = roll_dice(player_dict[x])
scores_dict[player_dict[x]] = score
def roll_dice(player_name):
start_rolling = input(f'{player_name} roll dice? y/n> ')
if start_rolling == 'y' or start_rolling == 'Y':
roll = randint(1, 6)
print(f'{player_name} rolls a {roll}')
return roll
return
main()
答案 0 :(得分:0)
最简单的方法可能是通过将scores_dict
合并到player_dict
中来消除它,并让玩家dict的值成为两个成员的列表,如下所示:
player_dict = {}
for pl in range(1, player, step):
player_name = input(f'Player {str(pl)} name> ')
player_dict[pl] = [player_name, 0] #each dict value is a list, initial score = 0
for x in player_dict:
score = roll_dice(player_dict[x][0]) #the player name is at list index 0
player_dict[x][1] = score #the player score is at list index 1
results = [x for x in player_dict.items()] #make a sortable list from the dict
#sort the list in reverse order, using a key function that looks at scores:
sorted_results = sorted(results, key=lambda x: x[1][1], reverse=True)
print([x[1] for x in sorted_results]) #view a ranked list of players & scores
答案 1 :(得分:0)
首先想到的是可能存在重复的乐谱,需要处理。您可以通过.values()
方法获取字典的所有值。您可以使用set()
删除重复项。您可以使用sorted(the_list, reverse=True)
首先获得最高分。 (在Py3.8中,sorted()
将接受一组作为输入。)然后遍历排序列表,这将一次为您提供每个值,并使用该值遍历玩家列表以查看谁得到了分数,打印出他们的名字。您可能想要类似的东西:
1st: Adam
2nd: Bob and Barry are tied
:
:
5th: Mike
6th: Steve
也许是这样的:
for index, score in enumerate(sorted(set(scores_dict.values()), reverse=True):
player_list = [p for p in player_dict.values() if score_dict[p] == score]
if len(player_list) == 1:
print("{rank}: {player}".format(rank=index+1, player=player_list[0]))
else:
print("{rank}: {players} are tied".format(rank=index+1, players=' and '.join(player_list)))
enumerate()
是一个很棒的例程,它为返回值添加了编号。
[p for p in player_dict.values() if score_dict[p] == score]
是一个列表理解,它从输入语句创建一个列表。
[[*,1,2]中x的x * x将返回[0,1,4]
[x * x表示[0,1,2]中x的值,如果x <2]添加条件并返回[0,1]
此外,作为一个旁注,不清楚此数据是否需要两个字典。除非您出于某种原因确实需要保留玩家编号id,否则您可能只需要player_dict,并以玩家名称作为键,并以得分作为值。