至於電腦程式 (或計算機程式), 則特指該流程是利用電腦執行, 而所謂的特定格式則指採用特定的計算機語言, 與本網誌相關的課程, 主要採用 Python, 其次還使用 Javascript, C/C++ 與 Lua 等程式語言.
學習計算機程式, 特定語言的語法與解題流程互為因果, 因此在過程中, 除了必須了解各程式語言的基本範式及語法外, 還需要針對解題流程中所使用的資料結構與演算法進行取捨, 對於中型以上程式, 還需選擇採用何種資料庫系統.
希望利用 Python 對各班學員亂數分組, 必須先了解如何讀進 (with 與 open 及 read) 各班的學員檔案, 設法將各學員的學號轉進數列 (包含利用 splitlines() , 然後導入 random, 並且了解 random.shuffle() 的用法.
接著在編寫學員亂數分組程式時, 則可按照下列流程配置上述各程式元件:
- 讀進學員資料, 設法將各學員學號轉入數列
- 利用亂數模組中的 shuffle 函式, 隨機弄亂學員學號數列
- 利用重複迴圈, 從學員學號數列中一一取出, 準備進行分組
- 在迴圈中利用整數相除後取得餘數的規律, 依照每組幾人的規劃進行分組
- 在分組過程, 再設法利用數列的 append, 將各組學員學號納為分組數列
- 最後將各組數列再放入選課班級數列中備用
本學期各班配合協同執行課程實習任務, 進行學員亂數分組, 以下為參考程式:
import random filename = 'cdaw1_student_list.txt' # 每組人數 num_in_one_group = 8 # 組序由 1 開始 group = 1 # 各班分組後所得數列 c2019 = [] with open(filename) as f: # 讀進全部檔案, 轉進數列, 並同時將各行的 \n 去除 read_data = f.read().splitlines() print("共有 " + str(len(read_data)) + " 位學員") # 利用 shuffle 將數列隨機弄亂 random.shuffle(read_data) for i in range(len(read_data)): # 利用整數相除的餘數進行分組 if i%num_in_one_group == 0: # 列出分隔符號 print("-"*20) print("group " + str(group) +":") # 在分組區隔時重置各組學員數列 group_list = [] print() # 同時列出與分隔標註對應 i 的數列內容 print(read_data[i]) group_list.append(read_data[i]) group = group + 1 else: # 逐一列出同組的其他學員 print(read_data[i]) group_list.append(read_data[i]) if i%num_in_one_group == 0: c2019.append(group_list) # c2019 為該班分組後所得分組數列 print(c2019)
註: 第一週 cda 學員資料: cdaw1_student_list.txt
另外, 本學期除學員自評外, 加入各組學員互評機制, 請各組實際根據課程評量表單取回之資料, 以程式進行處理, 並提出此一評量機制可能帶來的問題與因應方案.
已知問題
利用 mde At nfu At edu At tw G suite 建立自評與互評表單, 目前無法讓 gm At nfu At edu At tw 的用戶登入填表, 第一種解決方法為, 設法配合課程, 在 gm At nfu At edu At tw 網域帳號中重新建立表格, 第二種解決方案則是, 為每一學員建立 mde At nfu At edu At tw 網域下的臨時課程帳號 (課程結束後刪除).
cda w2 分組結果:
ReplyDeletegroup 1:
40623108
40623122
40623129
40623119
40623116
40623101
40623117
40623140
40423157
40623158
--------------------
group 2:
40423160
40423136
40623142
40623133
40623115
40623146
40623145
40423218
40623139
40623130
--------------------
group 3:
40623105
40623112
40623118
40623156
40623109
40623128
40623125
40623127
40623135
40623141
--------------------
group 4:
40623124
40623102
40623110
40623152
40623111
40623144
40623113
40623121
40623157
40623132
--------------------
group 5:
40623153
40423111
40423142
40623138
40623154
40423214
40623134
40623131
40423159
40623114
--------------------
group 6:
40623155
40423249
40623137
40423122
40623107
40623136
40623150
40623147
---------------------------------------------