A21376. 模拟扑克牌先按同名牌和大小排序
填空题
中等
知识点
题目描述
模拟扑克牌先按同名牌和大小排序
题目描述
在进行扑克游戏时,有人习惯于将抓到的扑克牌先按同名牌的数量排序,再按牌的大小排序。请编写程序,模拟这种排序方法:
要求:
(1)接收用户输入的若干整数(1到13之间,每个数字用逗号隔开,相同数字最多出现4个);
(2)通过函数将这些整数排序,先按相同整数的数目由多到少排序,相同数目的整数 再按从大到小排序,将排好序的数字放入一个元组中,并将元组打印到屏幕上。
提示:
(1)接收用户输入的用逗号隔开的整数,将其转换成方便处理的列表或元组; (2)利用函数将不同数目的整数分隔开,放入不同的列表中(card 函数可以实现); (3)针对不同的列表进行排序操作(在 card 函数基础上继续编写代码); (4)将排好序的列表中的项目依次组合,并转换成一个元组打印到屏幕上。 注:input()函数中不要增加任何参数等提示信息。
输入
1,5,6,1,9,2,1,4,1,6,3,3输出
(1, 1, 1, 1, 6, 6, 3, 3, 9, 5, 4, 2)参考答案
def card(lst):
# 定义一个字典,用来存储同名牌的个数
count_dict = {}
for card in lst:
if card not in count_dict:
count_dict[card] = 1
else:
count_dict[card] += 1
# 将同名牌的个数相同的牌放在同一个列表中
count_list = [[] for _ in range(4)]
for key, value in count_dict.items():
count_list[value-1].append(key)
# 对count_list中的每个子列表进行排序
for i in range(len(count_list)):
count_list[i].sort(reverse=True)
# 将排好序的各个子列表拼接成一个列表
result = []
for i in range(len(count_list)-1, -1, -1):
for j in range(len(count_list[i])):
result.extend([count_list[i][j]] * (i+1))
return tuple(result)
# 接受用户输入的若干整数,将其转换为列表lst
lst = list(map(int, input().split(',')))
# 调用函数进行排序,并输出结果
result = card(lst)
print(result)
上一题
下一题