用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/

五、代碼原創性說明
代碼爲原創。

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