#根据课程名定义三个集合,course1,course2,course3course1 = set(('李雷', '张玉', '王晓刚', '陈红静', '方向', '司马清'))course2 = set(('施然', '李芳芳', '刘潇', '方向', '孙一航', '黄煌'))course3 = set(('陈红静', '方向', '刘培良', '张玉', '施小冉', '司马清'))#使用集合的union函数对3个集合元素进行去重整合,得到1个人员没有重复的集合choose_courses_personchoose_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 = 0for 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 = 0print("有{}个学生修选了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门课,他们是: 方向****.上面写的这个有些地方可能不太符合题目要求,希望能有所帮助吧.