Monday, February 18, 2019

亂數分組參考程式

"程式"中的"程"表示流程, 而"式"則指採用特定格式, 因此"程式"可以解釋為利用特定格式的語法來表達特定流程.

至於電腦程式 (或計算機程式), 則特指該流程是利用電腦執行, 而所謂的特定格式則指採用特定的計算機語言, 與本網誌相關的課程, 主要採用 Python, 其次還使用 Javascript, C/C++ 與 Lua 等程式語言.

學習計算機程式, 特定語言的語法與解題流程互為因果, 因此在過程中, 除了必須了解各程式語言的基本範式及語法外, 還需要針對解題流程中所使用的資料結構與演算法進行取捨, 對於中型以上程式, 還需選擇採用何種資料庫系統.

希望利用 Python 對各班學員亂數分組, 必須先了解如何讀進 (withopenread) 各班的學員檔案, 設法將各學員的學號轉進數列 (包含利用 splitlines() , 然後導入 random, 並且了解 random.shuffle() 的用法.

接著在編寫學員亂數分組程式時, 則可按照下列流程配置上述各程式元件:

  1. 讀進學員資料, 設法將各學員學號轉入數列
  2. 利用亂數模組中的 shuffle 函式, 隨機弄亂學員學號數列
  3. 利用重複迴圈, 從學員學號數列中一一取出, 準備進行分組
  4. 在迴圈中利用整數相除後取得餘數的規律, 依照每組幾人的規劃進行分組
  5. 在分組過程, 再設法利用數列的 append, 將各組學員學號納為分組數列
  6. 最後將各組數列再放入選課班級數列中備用

本學期各班配合協同執行課程實習任務, 進行學員亂數分組, 以下為參考程式:

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 網域下的臨時課程帳號 (課程結束後刪除).

1 comment:

  1. cda w2 分組結果:

    group 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
    ---------------------------------------------

    ReplyDelete

NX12

NX 12 Help https://docs.plm.automation.siemens.com/tdoc/nx/12/nx_help Python related https://docs.plm.automation.siemens.com/tdoc/nx/...