7-40 jmu-python-班级人员信息统计 (15 分)

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

输入格式:

第1行::a班名单,一串字符串,每个字符代表一个学生,无空格,可能有重复字符。
第2行::b班名单,一串字符串,每个学生名称以1个或多个空格分隔,可能有重复学生。
第3行::参加acm竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。
第4行:参加英语竞赛的学生,一串字符串,每个学生名称以1个或多个空格分隔。
第5行:转学的人(只有1个人)。

输出格式

特别注意:输出人员名单的时候需调用sorted函数,如集合为x,则print(sorted(x))
输出两个班级的所有人员数量
输出两个班级中既没有参加ACM,也没有参加English的名单和数量
输出所有参加竞赛的人员的名单和数量
输出既参加了ACM,又参加了英语竞赛的所有人员及数量
输出参加了ACM,未参加英语竞赛的所有人员名单
输出参加英语竞赛,未参加ACM的所有人员名单
输出参加只参加ACM或只参加英语竞赛的人员名单
最后一行:一个同学要转学,首先需要判断该学生在哪个班级,然后更新该班级名单,并输出。如果没有在任何一班级,什么也不做。

输入样例:

abcdefghijab
1   2 3 4 5 6 7 8 9  10
1 2 3 a b c
1 5 10 a d e f
a
结尾无空行

输出样例:

Total: 20
Not in race: ['4', '6', '7', '8', '9', 'g', 'h', 'i', 'j'], num: 9
All racers: ['1', '10', '2', '3', '5', 'a', 'b', 'c', 'd', 'e', 'f'], num: 11
ACM + English: ['1', 'a'], num: 2
Only ACM: ['2', '3', 'b', 'c']
Only English: ['10', '5', 'd', 'e', 'f']
ACM Or English: ['10', '2', '3', '5', 'b', 'c', 'd', 'e', 'f']
['b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
结尾无空行

我的回答:

# 处理多个空格间隔的函数:
def HandleBlock(list):new_list =[]for item in list:if item != "":new_list.append(item)return new_list# 输入
grade_a_str = input()
grade_b_original_list = input().split(" ")
acm_original_list = input().split(" ")
english_original_list = input().split(" ")
trans_school = input()# 列表化处理
grade_a_list = []
for item in grade_a_str:grade_a_list.append(item)
grade_b_list = HandleBlock(grade_b_original_list)
acm_list = HandleBlock(acm_original_list)
english_list = HandleBlock(english_original_list)# 去重复处理:
'''
# 建立哈希表
check_table = {}
for item in grade_a_list + grade_b_list:check_table[item] = 0
# 通过哈希冲突来去重
final_a = []
final_b = []
for item in grade_a_list:if check_table[item] == 0:final_a.append(item)check_table[item] = 1
for item in grade_b_list:if check_table[item] == 0:final_b.append(item)check_table[item] = 1
'''
# 用集合法去重可能更简单:
final_a = list(set(grade_a_list))
final_b = list(set(grade_b_list))
# 输出的测试
'''
print(sorted(final_a))
print(sorted(final_b))
print(sorted(acm_list))
print(sorted(english_list))
print(sorted(trans_school))
'''
# 输出处理
print(f'Total: {len(final_a)+len(final_b)}')
Not_in_race = []
All_racers = []
ACMandEnglish = []
Only_ACM = []
Only_English = []
ACMorEnglish = [] #只参加了acm或者english中的一项
for item in final_a + final_b:if item in acm_list:All_racers.append(item)if item in english_list:ACMandEnglish.append(item)else:Only_ACM.append(item)elif item in english_list:All_racers.append(item)if item in acm_list:ACMandEnglish.append(item)else:Only_English.append(item)else:Not_in_race.append(item)
# 利用集合的补集运算
ACMorEnglish = list(set(Only_ACM)^set(Only_English))
print(f"Not in race: {sorted(Not_in_race)}, num: {len(Not_in_race)}")
print(f"All racers: {sorted(All_racers)}, num: {len(All_racers)}")
print(f"ACM + English: {sorted(ACMandEnglish)}, num: {len(ACMandEnglish)}")
print(f"Only ACM: {sorted(Only_ACM)}")
print(f"Only English: {sorted(Only_English)}")
print(f"ACM Or English: {sorted(ACMorEnglish)}")
if trans_school in final_a:print(sorted(list(set(trans_school) ^ set(final_a))))
elif trans_school in final_b:print(sorted(list(set(trans_school) ^ set(final_b))))
else:pass

能从这道题目里面学习到的知识点:

  1. 首先是关于以1个或多个空格分隔的处理,我们采用的是:

    • 依然先按照空格来进行元素的划分。
    • 去除列表中引多个空格分隔而产生的""字符。
  2. 本题当中学到的一个最重要的要点是
    • 以前面对重复元素问题的时候,我采取的通法都是用自建哈希表,通过哈希冲突的解决来解决重复元素的剥离问题。
    • 但是这次的解题中,我使用了Python中set的数据结构,天然地运用了集合本身互异性的特点通过把存在重复元素的列表先转化成集合,然后再将集合转回列表的方式,能够实现快速解决这种重复元素的剥离问题。
  3. 说明在处理不同集合之间的问题的相互关系的时候,要学会考虑去使用set这种数据结构,他们存在天然的优势,并且在集合间关系的讨论的问题中,我们还可以借用集合的运算很直接地处理一些分类问题。
  4. 最后要注意多了解python本身自带地函数,其中,sorted()函数列表的排序是很好用的功能。

Python的内置函数

Python的内置函数

7-40 jmu-python-班级人员信息统计 (15 分)相关推荐

  1. PTA15、班级人员信息统计 (10 分)

    15.班级人员信息统计 (10 分) 输入a,b班的名单,并进行如下统计. 输入格式: 第1行::a班名单,一串字符串,每个字符代表一个学生,无空格,可能有重复字符. 第2行::b班名单,一串字符串, ...

  2. 【Python】 1051 复数乘法 (15 分)

    复数可以写成 (A+Bi) 的常规形式,其中 A 是实部,B 是虚部,i 是虚数单位,满足 i​2​​ =−1:也可以写成极坐标下的指数形式 (R×e​(Pi)​​ ),其中 R 是复数模,P 是辐角 ...

  3. Python+班级管理系统 毕业设计-附源码171809

    目  录 摘要 1 绪论 1.1研究背景 1.2研究的目的与意义 1.3系统开发技术的特色 1.4论文结构与章节安排 2基于Python班级管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 ...

  4. 面向Python开发人员的综合置信区间全面理解

    面向Python开发人员的综合置信区间全面理解 置信区间是以范围表示并汇总统计中的不确定性的.换句话说,这是一系列我们确信自己真正价值所在的价值观.例如:我有95%的信心认为人口平均数在8.76到15 ...

  5. jmu–python–判断闰年_csf

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 6-1 使用函数输出指定范围内Fibonacci数的个数 (20分) 本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正 ...

  6. 【python练习,6.15】(霍兰德人格分析雷达图等)

    python程序设计方法学和计算生态概览练习内容 1.体育竞技分析 需求:如何科学分析体育竞技比赛 输入:球员的水平能力值 输出:可预测的比赛成绩 """ 比赛规则: 双 ...

  7. 40张python图表

    40张python图表 1. 条形图 # 库 import numpy as np import matplotlib.pyplot as plt# 创建数据集 height = [3, 12, 5, ...

  8. 小猪的Python学习之旅 —— 15.浅尝Python数据分析

    小猪的Python学习之旅 -- 15.浅尝Python数据分析:分析2018政府工作报告中的高频词 标签:Python 一句话概括本文: 爬取2018政府工作报告,通过jieba库进行分词后做词频统 ...

  9. 服不服?40行Python代码,实现卷积特征可视化

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|深度学习这件小事 卷积神经网络(CNN)变革了计算机视觉 ...

最新文章

  1. DGA域名——可以每天只生成一个域名,因此最多存在365个 DGA域名;
  2. 怎么在windows安装python模块_如何在windows环境下安装python里的模块
  3. 推荐几个图标显示控件
  4. 使用 Tye 辅助开发 k8s 应用竟如此简单(五)
  5. 《dp补卡——01背包问题》
  6. CCNP-第二篇-SLA扩展+EIGRP高级版(上)
  7. 计算机应用基础(高起专)答案,东北师范大学14秋《计算机应用基础(高起专)》14秋在线作业1答案...
  8. 电商 竞品分析_母婴电商类app竞品分析报告
  9. 聚焦BCS|吴云坤产业峰会演讲:用内生安全框架提升网络安全产值
  10. Docker部署项目的步骤,按步骤一步一步来,一切都会成功
  11. 为什么学习Markdown
  12. 基于麻雀算法改进的LSTM预测算法-附代码
  13. [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行...
  14. C# string byte数组互转;string byte[]互转
  15. 观察者模式Java内存管理进阶篇——如何避免内存泄漏
  16. ttc、otf、ttf文件制作以及相关数据增强(OCR)
  17. html实现背景图片自动更换,HTML实现背景图片的替换
  18. Java JNI调用kaldi动态链接库(Linux版本)
  19. html制作一个视频播放器,H5 打造属于自己的视频播放器(HTML 篇)
  20. 网络安全为啥要学Linux系统

热门文章

  1. Java输出语句可能遇到的中文乱码问题及解决方法。
  2. ASP.NET项目发布网站具体步骤
  3. 阿里线上排查工具阿尔萨司
  4. 洛谷NOIP刷题-P1016 旅行家的预算
  5. 任贤齐《如果没有你》
  6. 本创:如何才气建制出劣秀的Facebook游戏?
  7. 被汽车耽误的隐形代工巨头比亚迪?
  8. STM32F103步进电机梯形匀加速算法
  9. 如何创作用纯 CSS 绘制一支栩栩如生的铅笔 1
  10. android9三星功能,三星Galaxy-S9+/SM-N960F/Exynos处理器-crDroid-V5.3-安卓9.0.0-来去电归属T9-农历等-多功能本地化增强...