用Python實現一個簡單課堂點名器V2
一、任務描述
- 以80名學生名單爲例,從外部文件導入學生信息,隨機對班級所有同學進行點名,記錄未到同學的名單;
- 點名結束後,能夠將未到同學的姓名和學號信息展示出來;
- 將未到學生的信息保存到一個.csv格式的文件中;
- 在點名互動環節輸入正常值和異常值測試程序。
二、方案
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()
四、用到的知識點
- openpyxl庫
load_work()打開一個xlsx文件
workbook.active()獲取當前活躍的sheet頁 - random庫
random.sample():從指定序列中隨機獲取指定長度的片段,原有序列不會改變,有兩個參數,第一個參數代表指定序列,第二個參數是需獲取的片段長度, - 列表
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位置元素取出並刪除該元素 - 參考資料:
存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/
五、代碼原創性說明
代碼爲原創。