测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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)
上一题 下一题