上学最恐怖的事在于上课前点名签到,尤其这个签到脚本更恐怖。

前言

开学已经有一段时间了,大学生活不能缺席的莫过于上!课!签!到!

随着科技的发展老师和学生思维的改变,二维码签到、手势签到、位置签到

……

我们总能看见一些,常规or非常规。传统or新潮的点名方式———

常规性的我们已经体验过了:纸飞机到底飞哪里、交手机签到、点名答到、随机抽查......

记得第一天上Python课堂的时候,老师就给我们做了一个随机签到以及随机点名回答问题的小程

序,第一次体验的时候还怪——刺激的??!

图片

 时隔多年,就圆梦一波,当年没做成的小程序,今天来给大家做一做,就挺简单,给很多刚刚学

习的小伙伴儿练练手吧!话不多说,我们开始??????

一、《随机提问点名小程序》

1)本文是基于Tkinter写的一个界面化小程序:

Pyttsx3 文字转语音库使用。(有声音提示点名不需要老师自己在喊了哦~)

openpyxl模块是一个读写Excel 2010文档的Python库,如果要处理更早格式的Excel文档,需要用

到额外的库,openpyxl是一个比较综合的工具,能够同时读取和修改Excel文档。其他很多的与

Excel相关的项目基本只支持读或者写Excel一种功能。(这是存放学生名字用到的模块)

2)环境安装

本文需要的环境如下?

Python、Pycharm 安装包:我用的是3.7的Python跟2019年的社区版Pycharm,这个可以看大家的

基本上都是可以用的,代码兼容都可以运行的。

pyttsx3、openpyxl、tkinter以及部分自带模块。

环境安装不会的可以找我拿安装包跟安装的视频、相应的Pycharm专业版的永久激活码这边也是有

的但是有版本限制有的不能激活的哈。

第三方库的安装通常是:

pip install  +模块名

或者是感觉安装速度太慢可以添加镜像源文件的,这边我通常用的是豆瓣的镜像源:

pip install -i https://pypi.douban.com/simple/ +模块名

二、效果展示

 三、代码演示

#!/usr/bin/env python
# coding:gbk

import pyttsx3
import openpyxl
import random
import tkinter as tk
import tkinter.messagebox


#### 利用python第三方库pyttsx3来将文字用语音发送出来
def voice(a):
    ## pytttsx初始化
    engine = pyttsx3.init()
    ## a代表着需要转成音频的文字
    engine.say(a)
    # 注意,没有本句话是没有声音的
    engine.runAndWait()

### 创建一个list来保存已经被抽到名字的同学
ed_name= []

root = tk.Tk()  # 创建窗口对象
root.title("花名册     -----点名辅助程序   v1.10     ")
root.geometry("500x300")

# 创建抽取到的同学姓名展示部分
labelx=tk.Label(root,text="紫薇",fg="red",font=("宋体",80),width=9,height=2)
labelx.grid(row=0)

name_data = [] # 创建存储所有学生姓名的列表

def execl(filename, sheetname):
    wb = openpyxl.load_workbook(filename)  # 打开Excel
    sheet = wb[sheetname]  # 定位表单
    # 创建一个空列表
    column = 1
    for row in range(2, sheet.max_row + 1):
        if sheet.cell(row, column).value == "":
            continue
        name_data.append(sheet.cell(row, column).value)  # 将第一列的每一行数值遍历添加到name_data列表中;
    return name_data

execl("config\name.xlsx","Sheet1")  # 调用一下execl函数,在没有开始点名之前先将姓名添加到name_data列表之中


def ceshi():
    while 2>1:
        a = random.randint(0,len(name_data)-1)## 产生随机数,作为list的下标index

        b = "下面请"+name_data[a]+"同学来回答问题"## 拼接成字符串

        ## 判断ed_name元素个数是不是与name_data列表中相同,如果相同,那么代表着所有的同学名字都被抽点过了
        if len(ed_name) == len(name_data):
            tk.messagebox.askokcancel("提示", '所有的学生都已经抽取了一边,如需要继续,请关闭该程序重新打开')
            break

        ## 判断被抽点到的同学是不是已经被抽点过,如果被抽点过,则跳过该同学
        if name_data[a] in ed_name:
            continue

        ed_name.append(name_data[a])    # 将被抽点到的学生添加到ed_name例表中,标记已经被抽点

        labelx = tk.Label(root, text=name_data[a], fg="red", font=("宋体", 80), width=9, height=2)# 在姓名框里面展示姓名
        labelx.grid(row=0)

        voice(b) ## 语音读取

        break

tk.Button(root, text="开始点名", width=15, command=ceshi).grid(row=1,padx=10, pady=10,sticky='s')  # s南边也就是下边


root.mainloop()  # 进入消息循环

小结

我想很多时候:大家都喜欢老师不点名到你身上,BUT根据我的经验来说:你越不想被点名,老师

越能找出100种办法,花式点你的名!所以,与其想方设法逃避点名,不如老老实实走进教室

按时签到,上课认真听讲,努力学习!嘿嘿~ 完整的项目素材源码滴滴我!

图片

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>