一, 任务描述:
实验要求:
-
以某班级学生名单为例,从外部文件导入学生信息,随机对班级所有同学进行点名;
-
判断未到学生是否有请假条,有则视为请假,无则视为旷课。
-
对点名结束后进入教室的学生将旷课改为迟到。
-
对中途离开课堂学生计为早退(需要考虑学生既是迟到又是早退的情况)。
-
按照请假、旷课、迟到、早退四类分别展示。
-
将未到学生按照请假、旷课、迟到、早退四类分别存储在四个.csv格式的文件中。
二,实验方案:
1. 实验思路:
(1)导入所用模块:
由于定名方式是随机点名,所以导入random模块;
想要从外部文件读取学生名单,这里用到xlrd包;
想要将请假…等四类名单分别存储在四个.csv格式的文件中。这里采用pandas包;
(2)由于要对学生点名,这里采用学号索引,用了大量的函数模块,利用函数来返回学号和姓名,通过函数来实现不同的功能:
注:函数返回两个列表时为元组形式,格式为:([列表1],[列表2])
- 定义函数student,输入读取Excel文件地址,从Excel文件读取学号和姓名,返回全体学生学号和姓名列表。
- 定义函数num:输入想要点名人数,返回点名人数。为了输入格式的完整。
- 定义函数dianming:输入函数student返回的列表学号,姓名,和函数num返回的人数,进行随机点名,返回随机学号,姓名列表。
- 定义函数zaotui:输入列表学号,姓名,判断是否早退,返回早退学号,姓名列表。用于后面函数的调用。
- 定义函数puanduan1:输入函数dianming返回的学号,姓名,判断是否来了,返回点名期间早退和没来学号,姓名列表。(里面调用了函数zaotui函数)
- 定义函数panduan2:输入列表学号,姓名,创建缺勤和迟到名单,返回早退学号列表,用于判断点名期间没有请假条的人。(里面调用了函数zaotui函数)
- 定义函数qingjia:输入函数puanduan1返回没来的列表学号,判断是否有请假条,有就创建请假表,没有就调用函数panduan2创建迟到表,创建缺勤表,返回点名期间没来并且早退学号,姓名列表。
- 定义函数date:输入列表学号,姓名,得到函数table中date数据。
- 定义函数table:输入表头名称(学号,姓名),表中数据,存放地址,生成表,里面用format格式化建表。
(3)实验流程图:
三, 实验代码
#导包
import xlrd #导入xlrd包,对Excel读取数据
import pandas as pd #导入pandas包,用于对Excel操作
import random #导入随机random模块
#定义函数:从Excel文件读取学号和姓名,返回全体学号和姓名列表
def student(address):
data = xlrd.open_workbook(address)
table = data.sheet_by_name('Sheet1') #选定页码1--(Sheet1).
rowNum = table.nrows #总行数
colNum = table.ncols #总列数
a = [] # 获得学号
b = [] # 获得姓名
for y in range(colNum): #自动索引学号(xuehao),姓名(name)
if table.cell_value(0, y) == 'xuehao':
for x in range(1, rowNum):
vaule = table.cell_value(x, y)
vaule = float(vaule)
vaule = int(vaule)
a.append(vaule)
if table.cell_value(0, y) == 'name':
for x in range(1, rowNum):
vaule = table.cell_value(x, y)
b.append(vaule)
return a, b
#定义函数:输入想要点名人数:
def num():
while True:
s = input()
if s.isdigit(): # 判断输入是否为数字,是(true),否(Flase)
num = eval(s)
if (0 <= num <