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