用Python实现一个简单课堂点名器(从外部调取文件)

本文介绍了如何使用Python从外部Excel文件导入学生信息,实现随机点名、请假、旷课、迟到、早退的判断,并将结果分别存储到CSV文件中。通过定义一系列函数,包括读取Excel、随机点名、判断学生状态等功能,完成课堂考勤系统的功能实现。最后,作者表达了对代码优化和学习更多Python知识的期待。
摘要由CSDN通过智能技术生成

一, 任务描述:

实验要求:

  1. 以某班级学生名单为例,从外部文件导入学生信息,随机对班级所有同学进行点名;

  2. 判断未到学生是否有请假条,有则视为请假,无则视为旷课。

  3. 对点名结束后进入教室的学生将旷课改为迟到。

  4. 对中途离开课堂学生计为早退(需要考虑学生既是迟到又是早退的情况)。

  5. 按照请假、旷课、迟到、早退四类分别展示。

  6. 将未到学生按照请假、旷课、迟到、早退四类分别存储在四个.csv格式的文件中。

二,实验方案:

1. 实验思路:

(1)导入所用模块:
由于定名方式是随机点名,所以导入random模块;
想要从外部文件读取学生名单,这里用到xlrd包;
想要将请假…等四类名单分别存储在四个.csv格式的文件中。这里采用pandas包;

(2)由于要对学生点名,这里采用学号索引,用了大量的函数模块,利用函数来返回学号和姓名,通过函数来实现不同的功能:

注:函数返回两个列表时为元组形式,格式为:([列表1],[列表2])

  1. 定义函数student,输入读取Excel文件地址,从Excel文件读取学号和姓名,返回全体学生学号和姓名列表。
  2. 定义函数num:输入想要点名人数,返回点名人数。为了输入格式的完整。
  3. 定义函数dianming:输入函数student返回的列表学号,姓名,和函数num返回的人数,进行随机点名,返回随机学号,姓名列表。
  4. 定义函数zaotui:输入列表学号,姓名,判断是否早退,返回早退学号,姓名列表。用于后面函数的调用。
  5. 定义函数puanduan1:输入函数dianming返回的学号,姓名,判断是否来了,返回点名期间早退和没来学号,姓名列表。(里面调用了函数zaotui函数)
  6. 定义函数panduan2:输入列表学号,姓名,创建缺勤和迟到名单,返回早退学号列表,用于判断点名期间没有请假条的人。(里面调用了函数zaotui函数)
  7. 定义函数qingjia:输入函数puanduan1返回没来的列表学号,判断是否有请假条,有就创建请假表,没有就调用函数panduan2创建迟到表,创建缺勤表,返回点名期间没来并且早退学号,姓名列表。
  8. 定义函数date:输入列表学号,姓名,得到函数table中date数据
  9. 定义函数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 <
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值