2022 Fall 課程 w14

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)
電腦輔助設計與實習 ----