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

一、概况

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

那我们今天用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编程,此功能可能还不太完善。大家如果有兴趣,可以顺着此思路写一个更好的程序,让每位同学都爱上被提问。当你独立工作的时候,你可能会说:老师再提问我一次吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值