PTA集合练习:集合综合练习

题目要求:

输入a,b班的名单,并进行如下统计。

输入格式:

第1行 : a班名单,一串字符串,每个字符代表一个学生,1个或多个空格分隔,可能有重复字符。数字代表男生,字母代表女生。

第2行 :b班名单,一串字符串,每个字符代表一个学生,1个或多个空格分隔,可能有重复学生。数字代表男生,字母代表女生。

第3行 :参加数学竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。

第4行 :参加计算机竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。

1 2 3  4 a s d f
6 7 8 9 6 5 z x c
2 3 a s 8 9 z
1 3 4 s d 5 9 x z

输出格式:

注意:输出人员名单的时候需调用sorted函数,如集合为x,则print(sorted(x)) 。

输出两个班级的所有人员名单和数量。
输出两个班级中既参加数学,也参加计算机竞赛的名单和数量。
输出两个班级中参加比赛的女名单和数量。
输出两个班级中只参加数学竞赛的名单。

Total: ['1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'c', 'd', 'f', 's', 'x', 'z'], num: 16
Math and jsj: ['3', '9', 's', 'z'], num: 4
FeMale in race: ['a', 'd', 's', 'x', 'z'], num: 5
Only Math: ['2', '8', 'a']

解题思路:

逐行分析该题目要求:

  1. a,b班名单每个字符代表一个学生,男生用数字,女生用字母 --->男生为'1'~'9',女生为'a'~'z'及'A'~'Z'(是否含有大写待定),
  2. a,b班名单有可能重复 --->涉及到使用去重
  3. 既参加又参加 或者  只参加 或者  参赛女生名单 --->涉及到取交并集的问题

求解方法:

  1. 通过分析男生最多9人 女生最多52人 输出要求第三条可以用所有参赛者的集合与男生的集合取差集
  2. 可以用多种方法去重,比如循环判断,但集合练习,使用集合最为合适

实现代码:

# 获取输入信息
Class_A = input().split()  # A班学生字符串
Class_B = input().split()  # B班学生字符串
Math_Contest = input().split()  # 参与数学竞赛学生字符串
Computer_Contest = input().split()  # 参与计算机竞赛的学生字符串
# 参与竞赛的全部学生 = 计算机竞赛学生 与 数学竞赛的学生 的并集
Contest_Sheet = list(set(Math_Contest) | set(Computer_Contest))
# 因为男生人数少所以创建一个包含所有男生的列表 用于后面求参与竞赛的女生名单
Boy_Sheet = []
for i in range(0, 10):
    # 使用ASCII码转字符
    Boy_Sheet.append(chr(ord('1') + i))

# 班级名单去重
Class_A = list(set(Class_A))
Class_B = list(set(Class_B))

# 获取全部同学名单
Student_Sheet = []
Student_Sheet += Class_A
Student_Sheet += Class_B

# 上面两步可以简化成下面一行:
# Student_Sheet = list(set(Class_A) | set(Class_B))

# 既参加数学又参加计算机 = 数学竞赛人员 与 计算机竞赛人员 的交集
math_and_computer = list(set(Math_Contest) & set(Computer_Contest))
# 参加比赛的女生名单 = 参加比赛人员 与 男生列表 的差集 (前有后无)
Girl_Contest = list(set(Contest_Sheet) - set(Boy_Sheet))
# 只参加数学竞赛名单 = 参加数学竞赛人员 与 参加计算机竞赛人员 的差集
Only_Math = list(set(Math_Contest) - set(Computer_Contest))

# 输出
print(f"Total: {sorted(Student_Sheet)}, num: {len(Student_Sheet)}")
print(f"Math and jsj: {sorted(math_and_computer)}, num: {len(math_and_computer)}")
print(f"FeMale in race: {sorted(Girl_Contest)}, num: {len(Girl_Contest)}")
print(f"Only Math: {sorted(Only_Math)}")

(PTA耗时及内存消耗统计) 

备注:

  1. 本文题目选自PTA平台 闽江学院 zeng老师所出题目
  2. 该题看似题目复杂,实则核心为考查集合的基础用法
  3. 本题方法不唯一,该解法仅代表个人想法
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star※

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值