用Python实现一个简单课堂点名器V2

用Python实现一个简单课堂点名器V2
一、任务描述

  1. 以80名学生名单为例,从外部文件导入学生信息,随机对班级所有同学进行点名,记录未到同学的名单;
  2. 点名结束后,能够将未到同学的姓名和学号信息展示出来;
  3. 将未到学生的信息保存到一个.csv格式的文件中;
  4. 在点名互动环节输入正常值和异常值测试程序。

二、方案
1.数据:调用openpyxl库,从外部文件“学生名单.xlsx”导入数据,将导入的数据存放进booksheet等待下一步处理。
2.处理:若要完成随机对班级所有同学的点名,一是随机,先创建一个shuzi列表内存有1-80个数字,后调用random库,使用sample()对shuzi列表内80个数据进行随机抽取后再重新存如shuzi列表中。二是所有同学的姓名及学号,xh字符串用来存放循环遍历的同学学号;用append()函数将xh字符串增添入xhlb列表,xm字符串用来存放循环遍历的同学姓名;用append()函数将xm字符串增添入xmlb列表。利用zip()函数将xhlb和xmlb两个一维数组组合为一个二维数组。开始进行循环遍历,从shuzi列表中依次取出第一步处理的随机数进行点名,“1”表示已到,其余表示未到。记录未到同学的名单,将未出勤的学生名单存放进空列表zdy。直至80次循环结束,结束循环遍历,实现随机对所有同学点名。
3.输出:点名结束后,对zdy列表进行遍历,将学生名单按照学号、姓名的方式打印再屏幕上。将zdy写入“未到同学名单.csv”文件。

三、代码
from openpyxl import load_workbook
import random
import csv

workbook = load_workbook(‘D:\2238029330\FileRecv\名单.xlsx’)
booksheet = workbook.active
xhlb = []
xmlb = []
zdy =[]
shuzi=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79]
shuzi = random.sample(shuzi,80)
m = 0

for i in range(1,81):
xh = booksheet.cell(row=i, column=1).value
xhlb.append(xh)
xm = booksheet.cell(row=i, column=2).value
xmlb.append(xm)

z = list(zip(xhlb,xmlb))

for j in range(0,80):
print("{0} {1}".format(xhlb[shuzi[j]],xmlb[shuzi[j]]))
dianming = input("点名,到了输入1: ")
if dianming != ‘1’:
zdy.append(z[shuzi[j]])
m = m+1
else:
pass

print(“未到同学名单:”)
for k in range(0,m):
print(zdy[k])

test = [‘id’,‘name’]
with open(“D:\2238029330\FileRecv\未到同学名单.csv”,‘a’,newline=’’) as f:
write = csv.writer(f)
write.writerow(test)
write.writerows(zdy)
f.close()

四、用到的知识点

  1. openpyxl库
    load_work()打开一个xlsx文件
    workbook.active()获取当前活跃的sheet页
  2. random库
    random.sample():从指定序列中随机获取指定长度的片段,原有序列不会改变,有两个参数,第一个参数代表指定序列,第二个参数是需获取的片段长度,
  3. 列表
    lt=[] 定义空列表lt
    ls[i]=x 替换列表ls第i元素为x
    ls[i:j:k]=It 用列表lt替换ls切片后所对应元素子列表
    del ls[i] 删除列表ls中第i元素
    ls+=lt 更新列表ls,将列表lt元素增加到列表ls中
    ls.append(x) 在列表ls最后增加一个元素x
    ls.clear() 删除列表ls中所有元素
    ls.copy() 生成一个新列表,赋值ls中所有元素
    ls.insert(i,x) 在列表ls的第i位置增加元素x
    ls.pop(i) 将列表ls中第i位置元素取出并删除该元素
  4. 参考资料:
    存csv文件:https://www.cnblogs.com/liangxiyang/p/11272155.html
    两个一维列表转二维列表:
    https://blog.csdn.net/wangxingfan316/article/details/81387652
    导入xlsx:https://blog.csdn.net/index20001/article/details/73844576/

五、代码原创性说明
代码为原创。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章