Python字典:选手统计票数和姓名进行排序

具体题目:如今两年偶像选秀节目风头正盛,吸引了许多喜欢唱跳、有明星梦想的少男少女参加,青春有你正是节目之一。青春有你采用计票机制,选手获得的票数越多,排名就越靠前。本案例要求编写程序,接收选手的姓名和票数,输出排序后的成绩

实验分析:

(1)上面描述的选手的姓名与票数是一一对应的关系,因此可通过字典保存像这种关系的数据。

(2)按“选择的票数越多,排名越靠前”描述,此处需要比较字典中保存的票数,票数最高的选手位列第1名,票数最少的选手位列最后一名,可借助列表的sort()方法进行排序

代码如下: 

第一种:

player_info = {}
li = []
print('输入quit表示选手成绩录入完毕')
while True:
    name = input("请输入选手名称:\n")
    if name == 'quit':
        break
    score = float(input("请输入选手票数:\n"))
    player_info[name] = score
items = player_info.items()
for j in items:
    li.append([j[1], j[0]])
# 转换为list类型,进行排序
li.sort()
# 获取选手索引
count = len(li) - 1
# 输出排名
for i in range(1, len(li) + 1):
    print(f"第{i}名:{li[count][1]},成绩为{li[count][0]}分")
    count -= 1

第二种:

print("输入quit表示录入完毕:")
dict={}
for i in range(1,50):
    key=input("请输入选手的姓名:\n")
    if key=="quit":
       break
    value=int(input("请输入选手的票数:\n"))
    dict[key]=value
result = sorted(dict.items(), key=lambda x: x[1], reverse=True)
print("第一名:", result[0][0], "成绩为:", result[0][1], "分", )
print("第二名:", result[1][0], "成绩为:", result[1][1], "分", )
print("第二名:", result[2][0], "成绩为:", result[2][1], "分", )

运行结果:

小邹邹
@小邹邹

  • 32
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 好的,以下是Python代码实现: ```python # 定义一个空列表用于存储选手信息 players = [] # 循环输入选手姓名票数 while True: name = input("请输入选手姓名:") if not name: # 如果输入为空,则退出循环 break votes = int(input("请输入选手票数:")) players.append((name, votes)) # 将选手信息添加到列表中 # 对选手信息进行排序 players.sort(key=lambda x: x[1], reverse=True) # 输出排序后的成绩 print("排名\t姓名\t票数") for i, player in enumerate(players): print(f"{i+1}\t{player[0]}\t{player[1]}") ``` 运行程序后,依次输入选手姓名票数,输入空行即可结束输入。程序会自动对选手信息进行排序,并输出排序后的成绩,格式为“排名 姓名 票数”。 ### 回答2: 本题可以用Python字典和列表组合来完成。 首先,可以定义一个空的字典,用来保存选手姓名和对应的票数。通过while循环来不断要求输入选手姓名票数,可以设置终止条件比如输入“exit”就可以退出循环,将输入的姓名票数保存到字典中。 接下来,可以将字典中的键值对转换为元组,并将多个元组组成的列表按照票数从高到低进行排序。可以通过sorted()函数来实现这一过程。针对排序的方式,可以自定义一个排序函数,通过lambda表达式将列表中的元组按照第二个元素即票数进行排序。 最后,可以遍历排序后的列表,并输出选手姓名和对应的票数即可。 代码如下: ```python scores = {} while True: name = input("请输入选手姓名:") if name == "exit": break votes = int(input("请输入该选手票数:")) scores[name] = votes result = sorted(scores.items(), key=lambda x: x[1], reverse=True) for i in range(len(result)): print("第{}名:{},得票数:{}".format(i+1, result[i][0], result[i][1])) ``` 以上便是一个简单的Python程序,可以在控制台输入选手姓名和对应票数,然后按照票数从高到低输出选手的成绩排名。 ### 回答3: Python可以通过使用列表和字典来接收选手姓名票数,并输出排序后的成绩。下面是一个实现过程: 首先,我们要首先使用字典来存储选手姓名票数。键代表选手姓名,值代表选手票数。 ``` result = {} ``` 接着,我们需要从用户那里输入选手姓名票数,并将其存储到字典中。 ```python while True: name = input('请输入选手姓名:') if name == 'exit': break try: votes = int(input('请输入选手票数:')) except ValueError: print('票数必须为数字!') continue result[name] = votes ``` 在这个循环中,我们首先使用input函数从用户那里输入选手姓名。如果用户输入“exit”,我们就退出循环。接着,我们再使用try和except检查票数是否为数字,如果不是数字,则提示用户重新输入。最后,我们将选手姓名票数存储到字典中。 接下来,我们可以使用sorted函数按照选手票数的大小对字典进行排序。 ```python sorted_result = sorted(result.items(), key=lambda x:x[1], reverse=True) ``` 这个sorted函数将result字典中的键值对转换为元组,并按照值(票数进行排序。我们还可以使用lambda表达式来指定排序的key,reverse=True则表示按照倒序排列。 最后,我们可以使用循环遍历排序后的结果,输出选手姓名票数。 ```python for index, item in enumerate(sorted_result): print(f'第{index+1}名:{item[0]},得票数:{item[1]}') ``` 这个循环中,我们使用enumerate函数来获取排序后的元组的索引和值。我们输出选手姓名票数,并使用f-string来格式化输出结果。 完整代码如下: ```python result = {} while True: name = input('请输入选手姓名:') if name == 'exit': break try: votes = int(input('请输入选手票数:')) except ValueError: print('票数必须为数字!') continue result[name] = votes sorted_result = sorted(result.items(), key=lambda x:x[1], reverse=True) for index, item in enumerate(sorted_result): print(f'第{index+1}名:{item[0]},得票数:{item[1]}') ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值