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程序随机分组的方法。