一、概况

我们的三维世界并不能像四维世界那样,时间是可以随意控制的。时间过去就真的过去了,不得不说句时间过的有点快啊,高中一些片段的记忆还有时会浮现在脑海中。在高中课堂上,有的同学希望老师多提问一下自己,而有的同学在底下却默默祈祷,希望别提问他,甚至有的同学认为老师提问他是跟他过不去。现在回头想想,不知道会不会骂自己一句"鲨掉"。

那我们今天用Python程序写一个课堂点名器,用到的是Python中的GUI编程,这个真的很公平了,不偏不向。最后跟大家说句话:请珍惜时间。

欢迎大家加入小编创建的Python行业交流群,有大牛答疑,有资源共享,有企业招人!是一个非常不错的交流基地!群号:683380553

二、页面搭建

我们用的是Python中的Tkinter模块,我们大概做的功能有三个:随机点名

惩罚

日志写入

首先我们先简单的把界面搭建出来,代码很简单:

1import tkinter as tk

2

3

4class LoveYou():

5

6 # 初始化

7 def __init__(self):

8 # 第1步,建立窗口window

9 self.window = tk.Tk()

10

11 # 第2步,给窗口的可视化起名字

12 self.window.title('班级考单词程序')

13

14 # 第3步,设定窗口的大小(长*宽)

15 self.window.geometry('600x400')

16

17 self.text = tk.StringVar() # 创建str类型

18 self.count = tk.StringVar()

19

20 def take(self):

21 '''

22 负责随机抽取同学提问

23 :return:

24 '''

25 pass

26

27 def kill(self):

28 '''

29 负责根据星期几选择不同惩罚遍数

30 :return:

31 '''

32 pass

33

34 def main(self):

35 '''

36 主函数负责绘制

37 :return:

38 '''

39

40 # 绘制筛选信息

41 l2 = tk.Label(self.window, fg='red', textvariable=self.text, width=500, height=3)

42 l2.config(font='Helvetica -%d bold' % 30)

43 l2.pack()

44

45 # 绘制惩罚信息

46 l3 = tk.Label(self.window, fg='red', textvariable=self.count, width=500, height=3)

47 l3.config(font='Helvetica -%d bold' % 20)

48 l3.pack()

49

50 # 绘制筛选按钮

51 btntake = tk.Button(self.window, text="筛选", width=15, height=2, command=self.take)

52 btntake.pack()

53

54 # 绘制惩罚按钮

55 btnkill = tk.Button(self.window, text="惩罚", width=15, height=2, command=self.kill)

56 btnkill.pack()

57

58 # 进入循环

59 self.window.mainloop()

60

61

62if __name__ == '__main__':

63 loveyou = LoveYou()

64 loveyou.main()

我们点击筛选按钮的时候就会执行take函数,此函数主要负责随机抽取同学。当我们点击惩罚按钮的时候就会执行kill函数

,此函数主要负责惩罚同学。

三、数据获取

在班级我们一般都会有个班级人员名单(xxx.xlsx)。当我们初始化程序的时候,我们把本地的数据读取到程序中。我们在本地创建一个表格写点假数据:

通过xlrd模块可以把数据读取到程序中,但是我们需要安装这个模块:

1pip install xlrd

我们写个函数读取:

1 def read_data(self):

2 '''

3 数据读取

4 :return:

5 '''

6 workbook = xlrd.open_workbook('1801.xlsx')

7

8 sheet1 = workbook.sheet_by_index(0) # sheet索引从0开始

9

10 data = sheet1.col_values(0) # 读取第一列内容

11

12 # ['表格 1', '姓名', '小王', '老王', '小明', '小红', '小绿', '小青', '小陈', '小赵', '小王', '小李', '小孙', '小周', '小吴', '小钱', '小史', '小三', '小四', '小五', '小六']

13

14 data.pop(0) # 把表格 1去掉

15 data.pop(0) # 把姓名 去掉

16

17 return data

这个函数中返回的data就是从本地读取的同学名单。

四、点名实现

我们一共设定随机次数,例如50次,直到最后随机出来的同学才当做结果。大概逻辑如下:

1 def take(self):

2 '''

3 负责随机抽取同学提问

4 :return:

5 '''

6

7 for s in range(50):

8 '''

9 后几秒慢点,制造紧张气氛

10 '''

11 desc = ''

12 if s == 47:

13 time.sleep(0.5)

14 elif s == 48:

15 time.sleep(0.6)

16 elif s == 48:

17 time.sleep(0.7)

18 elif s == 49:

19 time.sleep(0.9)

20 else:

21 time.sleep(0.1)

22

23 classes = random.sample(self.data, 2)

24 desc += "呦,你被上帝选中了:%s\n" % classes[0]

25 desc += "呦,你看着也很不错呀:%s\n" % classes[1]

26

27 self.text.set(desc) # 设置内容

28 self.window.update() # 屏幕更新

下面是动态图展示:

五、惩罚实现

我们根据周一到周五,每天惩罚的量不一样,惩罚的方式暂定抄写吧。

1 def kill(self):

2 '''

3 负责根据星期几选择不同惩罚遍数

4 :return:

5 '''

6

7 if self.day == 1:

8 count = random.randint(50, 100)

9 kill_desc = "上帝奖励了你们组%d遍" % (count)

10

11 elif self.day == 2:

12 count = random.randint(50, 120)

13 kill_desc = "上帝奖励了你们组%d遍" % (count)

14 self.count.set(kill_desc)

15 elif self.day == 3:

16 count = random.randint(50, 140)

17 kill_desc = "上帝奖励了你们组%d遍" % (count)

18 elif self.day == 4:

19 count = random.randint(50, 160)

20 kill_desc = "上帝奖励了你们组%d遍" % (count)

21 self.count.set(kill_desc)

22 elif self.day == 5:

23 count = random.randint(50, 180)

24 kill_desc = "上帝奖励了你们组%d遍" % (count)

25 else:

26 kill_desc = '周末就别提问了'

27

28 self.count.set(kill_desc) # 设置内容

29 self.window.update() # 屏幕更新

当我们点击筛选后,再点击惩罚,就出现罚写的遍数了。

六、日志实现

日志主要为了记录提问的人、什么时候提问的、罚写的遍数。我们都要把这些信息写入到本地,要不第二天老师忘记考谁了,学生也不承认提问我了,所以日志功能是必须的。

当最终提问人确定的时候调用savedesc函数

当点击惩罚按钮的时候调用savecount函数

1 def savedesc(self, desc):

2 '''

3 负责把选中的人写入到log里面

4 :param desc:

5 :return:

6 '''

7 with open('log.txt', 'a', encoding='utf-8') as f:

8 f.write(self.gettime() + "\n" + desc)

9

10 def savecount(self, count):

11 '''

12 负责把被罚写的遍数写入到log里面

13 :param count:

14 :return:

15 '''

16 with open('log.txt', 'a', encoding='utf-8') as f:

17 f.write(str(count) + '\n')

18 f.write('--------------------------------\n')

本地文件格式如下:

有个记录挺好的,省着赖账。

七、其他

基本功能就这些,我在界面上加了一些提示。比如今天的日期了,班级人数等等这些。

全部代码:

1import tkinter as tk

2

3import xlrd

4

5import time

6

7import random

8

9import datetime

10

11

12class LoveYou():

13

14 # 初始化

15 def __init__(self):

16 # 第1步,建立窗口window

17 self.window = tk.Tk()

18

19 # 第2步,给窗口的可视化起名字

20 self.window.title('班级考单词程序')

21

22 # 第3步,设定窗口的大小(长*宽)

23 self.window.geometry('600x400')

24

25 self.text = tk.StringVar() # 创建str类型

26 self.count = tk.StringVar()

27

28 self.data = self.read_data()

29

30 # 获取星期几

31 d = datetime.datetime.now()

32 self.day = d.weekday() + 1

33

34 def read_data(self):

35 '''

36 数据读取

37 :return:

38 '''

39 workbook = xlrd.open_workbook('1801.xlsx')

40

41 sheet1 = workbook.sheet_by_index(0) # sheet索引从0开始

42

43 data = list(sheet1.col_values(0)) # 读取第一列内容

44

45 # ['表格 1', '姓名', '小王', '老王', '小明', '小红', '小绿', '小青', '小陈', '小赵', '小王', '小李', '小孙', '小周', '小吴', '小钱', '小史', '小三', '小四', '小五', '小六']

46

47 data.pop(0) # 把表格 1去掉

48 data.pop(0) # 把姓名 去掉

49

50 return data

51

52 def take(self):

53 '''

54 负责随机抽取同学提问

55 :return:

56 '''

57

58 for s in range(50):

59 '''

60 后几秒慢点,制造紧张气氛

61 '''

62 desc = ''

63 if s == 47:

64 time.sleep(0.5)

65 elif s == 48:

66 time.sleep(0.6)

67 elif s == 48:

68 time.sleep(0.7)

69 elif s == 49:

70 time.sleep(0.9)

71 else:

72 time.sleep(0.1)

73

74 classes = random.sample(self.data, 2)

75 desc += "呦,你被上帝选中了:%s\n" % classes[0]

76 desc += "呦,你看着也很不错呀:%s\n" % classes[1]

77

78 if s == 49:

79 self.savedesc(desc) # 写入日志

80 self.text.set(desc) # 设置内容

81 self.window.update() # 屏幕更新

82

83 def kill(self):

84 '''

85 负责根据星期几选择不同惩罚遍数

86 :return:

87 '''

88

89 if self.day == 1:

90 count = random.randint(50, 100)

91 kill_desc = "上帝奖励了你们组%d遍" % (count)

92

93 elif self.day == 2:

94 count = random.randint(50, 120)

95 kill_desc = "上帝奖励了你们组%d遍" % (count)

96 self.count.set(kill_desc)

97 elif self.day == 3:

98 count = random.randint(50, 140)

99 kill_desc = "上帝奖励了你们组%d遍" % (count)

100 elif self.day == 4:

101 count = random.randint(50, 160)

102 kill_desc = "上帝奖励了你们组%d遍" % (count)

103 self.count.set(kill_desc)

104 elif self.day == 5:

105 count = random.randint(50, 180)

106 kill_desc = "上帝奖励了你们组%d遍" % (count)

107 else:

108 kill_desc = '周末就别提问了'

109

110 self.count.set(kill_desc) # 设置内容

111 self.window.update() # 屏幕更新

112

113 self.savecount(kill_desc) # 写入日志

114

115

116 def gettime(self):

117 '''

118 格式化时间

119 :return:

120 '''

121 return time.strftime('%Y-%m-%d', time.localtime(time.time())) + " 星期" + str(self.day)

122

123

124 def savedesc(self, desc):

125 '''

126 负责把选中的人写入到log里面

127 :param desc:

128 :return:

129 '''

130 with open('log.txt', 'a', encoding='utf-8') as f:

131 f.write(self.gettime() + "\n" + desc)

132

133 def savecount(self, count):

134 '''

135 负责把被罚写的遍数写入到log里面

136 :param count:

137 :return:

138 '''

139 with open('log.txt', 'a', encoding='utf-8') as f:

140 f.write(str(count) + '\n')

141 f.write('--------------------------------\n')

142

143 def main(self):

144 '''

145 主函数负责绘制

146 :return:

147 '''

148

149 # 绘制日期、班级总人数等

150 now = time.strftime('%Y-%m-%d', time.localtime(time.time())) + " 星期" + str(self.day)

151 now += "\n班级总人数:%s人" % str(len(self.data))

152 now += "\n正在合理计算中\n"

153

154 l1 = tk.Label(self.window, fg='red', text=now, width=500, height=5)

155 l1.config(font='Helvetica -%d bold' % 15)

156 l1.pack() # 安置标签

157

158 # 绘制筛选信息

159 l2 = tk.Label(self.window, fg='red', textvariable=self.text, width=500, height=3)

160 l2.config(font='Helvetica -%d bold' % 30)

161 l2.pack()

162

163 # 绘制惩罚信息

164 l3 = tk.Label(self.window, fg='red', textvariable=self.count, width=500, height=3)

165 l3.config(font='Helvetica -%d bold' % 20)

166 l3.pack()

167

168 # 绘制筛选按钮

169 btntake = tk.Button(self.window, text="筛选", width=15, height=2, command=self.take)

170 btntake.pack()

171

172 # 绘制惩罚按钮

173 btnkill = tk.Button(self.window, text="惩罚", width=15, height=2, command=self.kill)

174 btnkill.pack()

175

176 # 进入循环

177 self.window.mainloop()

178

179

180if __name__ == '__main__':

181 loveyou = LoveYou()

182 loveyou.main()

八、总结

此程序主要为了学习GUI编程,此功能可能还不太完善。大家如果有兴趣,可以顺着此思路写一个更好的程序,让每位同学都爱上被提问。当你独立工作的时候,你可能会说:老师再提问我一次吧!

怎么用python制作随机点名软件_利用Python实现课堂点名器!辅导员大大的夸赞了我!...相关推荐

  1. 怎么用python制作随机点名软件_如何用python编写一个简易的随机点名软件

    展开全部 思路:1.定义一个字2113典,把名字和数字对应起5261来:2.引用随机4102模块:3.输入要点名的个数1653,通过循环输出名字. 具体代码如下:# -*- coding:utf-8 ...

  2. 怎么用python制作随机点名软件_如何用python编写一个简易的随机点名软件?

    自问自答哈哈,高铁上随便写的代码 不过randint那里debug好像要(0, 3)不知道是什么原因 import random my_list = ['张三', '李四', '王五', '杨六'] ...

  3. 怎么用python制作随机点名软件_python写一个随机点名软件的实例

    最近有个随机点名软件的需求,故写了一个,上代码:github地址 # -*- coding: utf-8 -*- # @Time : 18-12-31 下午4:21 # @Author : Felix ...

  4. 怎么用python制作随机点名软件_python用tkinter实现一个简易能进行随机点名的界面...

    今天学到Python 有一个名为 random 的内置模块,可用于生成随机数, 这个好玩~可以用来做为上课随机点名的程序了哈哈.. def main_cor(): import random i = ...

  5. python制作心形照片墙_利用python生成照片墙的示例代码

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为:PIL. PIL历 ...

  6. python制作的网站例子_利用Python绘制Jazz网络图的例子

    最近在进行社交网络的学习,想利用Python来进行分析,但是网上关于这方面的资料好像很少,所以自己进行了一点研究,算是有一点点进步,现在将自己的成果发出来,希望这方面感兴趣的同学也可以快速入门.话不多 ...

  7. 钉钉python 自动发消息软件_利用Python自动发送钉钉数据消息,一个简单的上手小项目...

    现在大部分公司都使用钉钉作为内部的主要沟通工具,钉钉消息基本都上都能快速有效的被阅读,打开率会比邮件高上不少.所以准备使用钉钉来播报平台每日的成交额,并附上一些鼓励的话和图片.起到一个激励团队的作用 ...

  8. 怎么用python制作随机点名软件_python写一个随机点名软件

    #-*- coding: utf-8 -*-#@Time : 18-12-31 下午4:21#@Author : Felix Wang from tkinter import * importtkin ...

  9. python制作录屏软件_【Python成长之路】用python制作一款录屏小工具(1)

    哈喽大家好,我是鹏哥. 今天我想学习记录的内容是 --如何用python实现录屏. ~~~上课铃~~~ 1 写在前面 作为一名测试,有时候经常会遇到需要录屏记录自己操作,方便后续开发同学定位.以前都是 ...

  10. 如何用python制作动画的软件_大牛Python程序员制作3D动态可视化教程

    Bar3D(3D 柱状图) name -> str 图例名称 x_axis -> str x 坐标轴数据.需为类目轴,也就是不能是数值. y_axis -> str y 坐标轴数据. ...

最新文章

  1. 使用sourceInsight 提高代码编写效率
  2. PHP实时生成并下载超大数据量的EXCEL文件
  3. LCLFramework框架之Service模式
  4. cmd上写的java简单代码_用cmd编辑一个超级简单的小游戏,求代码
  5. 【CZY选讲·Yjq的棺材】
  6. Logistic Regression Classifier逻辑回归
  7. 第六届省赛(软件类)真题----Java大学B组答案及解析
  8. AAAI 2020 | 北理工阿里文娱:你所看视频的介绍,可以用到这样的「图像描述」技术...
  9. 如何设置谷歌浏览器在新窗口中打开搜索链接
  10. 基于JAVA+SpringMVC+MYSQL的社区交友平台
  11. Echarts数据可视化action图表行为的相关操作,开发全解+完美注释
  12. 2012第二届GIS制图大赛——赛前培训资料(上篇)
  13. 【案例分享】信息化建设改变行业运营形态
  14. tecplot云图——数据文本格式2
  15. PA1.3 代码+笔记
  16. 蚁群算法(ACO)求解路径规划
  17. ResNet50是什么
  18. 【JS-正则表达式】JS正则表达式完整教程(略长)
  19. Unity粒子系统(5.x)基础(二)
  20. hz什么梗_Hz是什么意思?

热门文章

  1. 360度评估中的问题示范:如何提问
  2. 那些你所不知道的结构光技术
  3. beamer制作学术slide
  4. Latex Beamer 入门教程
  5. sql可以查询数据但是提示对象名无效
  6. C++ friend和protected
  7. 【寻找最佳小程序】12期:小程序数据助手——微信官方打造,移动端数据分析工具...
  8. 华为鸿蒙OS精品资料汇总,持续更新中
  9. 用java制作扑克牌_Java程序设计之扑克牌
  10. 手机丢了,微信、支付宝绑了银行卡,第一时间该怎么办?