求助一个Python问题,用字典与集合的知识解下面这个题,感谢大佬帮忙🙏?
course1 = set(('李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清'))
course2 = set(('施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌'))
course3 = set(('陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清'))
d={}
data=[x for y in [course1,course2,course3]
for x in y]for x in data:
if x in d:
d[x]+=1
else:
d[x]=1
print(d,'\n')
print('这个班还有 %d 学生没有选课(by set)' % (25-len(course1|course2|course3)))
print('这个班还有 %d 学生没有选课(by dict)' % (25-len(d)))
print('有 %d 位学生同时选修了2门课' % list(d.values()).count(2))
print('有 %d 位学生同时选修了3门课' % list(d.values()).count(3))
print('有 %d 位学生同时选修了1门课' % list(d.values()).count(1))
course1 = set(('李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清'))
course2 = set(('施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌'))
course3 = set(('陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清'))
#使用集合的union函数对3个集合元素进行去重整合,得到1个人员没有重复的集合choose_courses_person
choose_courses_person = course1.union(course2,course3)
#总人数为25人,所以用25减去choose_courses_person的长度就是没有选课的人数
not_choose_num = 25-len(choose_courses_person)
print("没有选课的同学有{}人".format(not_choose_num))
#定义3个空列表,用来存放选1门课,2门课,3门课的人员(根据标题说的数据类型没有列表,这里也可以使用空集合,如course_one=set(),后面的append方法改为add)
course_one = []
course_two = []
course_three = []
#num用来存放下面for循环中每个person到底选了几门课
num = 0
for person in choose_courses_person:
if person in course1:
num +=1
if person in course2:
num +=1
if person in course3:
num +=1
if num == 1:
course_one.append(person)
if num ==2:
course_two.append(person)
if num ==3:
course_three.append(person)
#每个person执行后要将num清零,这样不会影响下个person
num = 0
print("有{}个学生修选了1门课,他们是: {}".format(len(course_one), ','.join(course_one)))
print("有{}个学生修选了2门课,他们是: {}".format(len(course_two), ','.join(course_two)))
print("有{}个学生修选了3门课,他们是: {}".format(len(course_three), ','.join(course_three)))
把上面的内容放到.py文件中,给执行权限,运行后结果为:
没有选课的同学有12人
有9个学生修选了1门课,他们是: 施然,刘潇,孙一航,李芳芳,施小冉,刘培良,黄煌,李雷,王晓刚
有3个学生修选了2门课,他们是: 张玉,司马清,陈红静
有1个学生修选了3门课,他们是: 方向
****.上面写的这个有些地方可能不太符合题目要求,希望能有所帮助吧.
d={"lesson1":[""],"lesson2":[],"lesson3":[]}
[]列表中分别是课程123中的报名的同学的名字
问题1:这个字典d中lesson123的元素合并去重后就是所有报名的同学人数n,25-n就是答案
问题2:计算有多少的元素in d["lesson1"]\d["lesson2"]\d["lesson3"]中的两个
问题3:计算有多少的元素in d["lesson1"]\d["lesson2"]\d["lesson3"]中的三个
问题4:计算有多少的元素in d["lesson1"]\d["lesson2"]\d["lesson3"]中的一个,未重复报名
希望我的回答对你有帮助,你的采纳就是最好的鼓励~
newdic={}
for i in people:
if newdic.get(i):
newdic[i]+=1
else:
newdic[i]=1
print(25-len(set(people))) #没选课人数
循环newdic,key是人名,value是课程数量