求助一个Python问题,用字典与集合的知识解下面这个题,感谢大佬帮忙

Python08

求助一个Python问题,用字典与集合的知识解下面这个题,感谢大佬帮忙,第1张

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))

在开始这个项目之前,我们先了解一下类变量的基础知识:

静态属性 ==>实例变量/成员变量

动态属性 ==>实例函数(方法)/成员函数(方法)

每一份实例都有自己独立的一份数据

对于公共的数据(对每个对象没有差异的数据),我们把它定义成实例变量是不合理的。我们只需要存储一份, 应该把它定义成类变量,所有的对象后期调用的时候直接调用类变量就可以了。这样可以提高运行速度、节约对象实例化的内存资源。

类变量一般位于类名称的下面,构造函数的上面;

类变量只存储一份,存储在类空间中,在每个对象的空间中不需要存储类变量

在类中访问类变量: 类名.类变量名称

在对象中访问类变量: 类名.类变量名称 或者 对象名.类变量名称

推荐:如果访问类变量,最好还是通过 类名.类变量名称 来进行访问。

如果类变量与实例变量同名,使用 对象名.类变量名 访问,优先访问的是实例变量。

原则:变量通过 对象名.变量名 的方式访问时,优先在当前对象中查找有没有该变量名,如果没有则去类空间中查找该变量名。

我们搭建一个可以统计学生人数的窗体,包括男生人数和女生人数:

前面的界面我们已经搭建好啦,现在我们要写一个student模块来实现数据统计的功能。

学生列表、男生人数、女生人数,我们将其作为类变量存储在Student类中,我们定义一个 load_student 函数用来读取文件中的学生信息,并实现男生女生人数的统计功能

为了防止每次实例化这个类的时候,类变量收到干扰;我们定义一个机制:在Student类的构造方法中,在调用 load_student 方法前先判断一下,如果类变量 student_list 数据为空,则需要导入,否则不导入数据。

现在我们把GUI与后台的功能做一个整合,这里我们定义一个控制程序 start.py ,作为程序的入口

现在已经可以从程序入口打开GUI了,但是还没有显示人数、表格中的数据也没有显示。所以我们需要在 studentgui 中再添加一个 load_student_info 函数,将功能函数获取到结果加载到GUI界面中。这里主要做两件事:

先实例化操作学生的类,

没有实例变量,实例化还有什么用?实际上,如果不实例化的话, Student 类中的数据是无法导入到 StudentGUI 中来用的。

实例化完成后,在StudentGUI中直接给显示学生人数的变量设置值即可:

给GUI界面的TreeView表格填充数据,填充之前先将TreeView清空:

然后判断传递过来的 student_list 里是否有数据,如果没有数据则弹出警示框,有数据则使用 insert 方法逐行插入数据:

至此,我们的项目已经基本完成了

1、首先在python程序上输入总人数50人(N),和所需要的分组数n,即可进行随机分组。

2、如果N不是n的整数倍,则n个小组中的人数会不相同。以上就是50个人在python程序随机分组的方法。