2022 Fall 課程進入第十四週, 計算機程式從最基本的關鍵字列印、變數設定, 變數型別轉換到數值運算, 理論上各學員應該已經會編寫溫度轉換程式. 至於電腦輔助設計實習則除了操作 Solvespace 套件 C++ 原始碼的編譯與零組件繪圖、NX2027 與 Onshape 的參數式零組件的繪圖, 並且將零組件轉入 Coppeliasim 進行模擬.
計算機程式學習流程
靜態網站中設置 Brython 程式環境的超文件:
Brython 程式的關鍵字如下: 列出關鍵字的原始碼:
import keyword from browser import document, html position = document["position"] kw = keyword.kwlist for i in kw: position <= i position <= ", " position <= html.BR() position <= "共有 " + str(len(kw)) + " 個" position <= html.BR()接下來只要將溫度轉換程式寫為 Function, 並且透過函式呼叫與 return 傳值, 就能讓程式編寫更加模組化. 之後假如能夠針對線上考試結果的 json 檔案解讀與 ast 模組中 literal_eval() 方法的運用, 就能將從 Gist 讀進的 list 或 dist 檔案內容, 轉為 Python 對應的資料結構. 從 w15 開始將要再導入 html5 中的 canvas 靜態與動態繪圖, 也希望下列以簡單物件導向方式編寫的線上考試成績處理程式, 可以作為初學者練習 OOP (Object Orient Programming)的範例. 至於, 有沒有 Python Programming 計算機程式課程相關的教課書? 有: [The Absolute Beginner's Guide to Python Programming] (在學校網段可以直接下載), w15-w18 可以將 Python 程式語法相關的內容設法整理在個人的課程網頁中. [The Absolute Beginner's Guide to Python Programming]: https://link.springer.com/book/10.1007/978-1-4842-8716-3
import ast from browser import document, html, bind brython_div = document["brython_div1"] # create a button using html brython_div <= html.BUTTON("輸入 cname, url", id="get_cname") class quiz: def __init__(self, cname, url): self.cname = cname self.url = url # 定義一個函式, 以班級代號字串作為輸入, 可以傳回各班修課學員的學號數列 def get_stud(self): # 將課程的班級代號字串作為 dict 的 key, 而 2022 fall 的課程代號作為對應值 # 使用者可以利用班級代號從 courses dict 取出課程代號 courses = {"1a": "0747", "1b": "0761", "2a": "0773", "2b": "0786"} # 利用 c_name 從 courses 得到該學期的課程代號 c = courses[self.cname] # 利用課程代號從學校教務主機取的該班修課人員名單 curl = "https://nfu.cycu.org/?semester=1111&courseno=" + c + "&column=True" # 讀出各修課人員資料後, 以跳行符號切割, 得到的 data 為數列 data = open(curl).read().split("\n") # 因為最後一筆資料為空字串, 因此利用數列運算將其去除 stud = data[:-1] # get_stud() 函式最後將對應班級的修課人員學號以數列格式傳回 return stud def get_score(self): # 利用 open() 與 read() 讀取考試結果 JSON 檔案 json_data = open(self.url).read() # 利用 ast.literal_eval() 將字串 dict, 轉為程式可用的 dict 資料型別 big_dict = ast.literal_eval(json_data) # 從 big_dict 中, 取出 body 中的 testuser 欄位資料 data = big_dict["body"]["testuser"] # 定義一個空 dict 資料變數, 隨後利用迴圈逐一將學號作為 key, 考試成績為 valude # 組成 quiz_dict 的資料內容, 以便之後可以用學號當作輸入, 取得該員考試成績 quiz_dict = {} for i in data: # data 資料中的 user_name 為考試學員的帳號, 也就是學號 stud_id = data[i]["user_name"] # data 資料中的 total_score 欄位為考試成績 # 因為考試成績為字串, 先轉為浮點數後, 再轉為整數 stud_score = int(float(data[i]["total_score"])) # 逐一以學號為 key, 考試成績為對應 value, 將資料放入 quiz_dict quiz_dict[stud_id] = stud_score # 取得各學員的考試成績 quiz_dict 後, 將資料傳回 return quiz_dict def gen_result(stud, score): abs_num = 0 for i in stud: brython_div <= i + ":" try: s = score[i] except: s = "缺考" abs_num += 1 brython_div <= s brython_div <= html.BR() brython_div <= "總計有 " + str(abs_num) + "人缺考" @bind(document["get_cname"], 'click') def get_cname(env): user_input = input("請輸入 cname,url") cname_url = user_input.split(",") cname = cname_url[0] url = cname_url[1] data = quiz(cname, url) stud = data.get_stud() score = data.get_score() # 以 stud, score 為輸入, 列出展示用的超文件結果 gen_result(stud, score)電腦輔助設計與實習 ----