2020-12-16 邏輯運算思維及程式設計座談會

增進工程學院學生對運算思維與程式設計之基本認知及適當作法討論

分享者: 何岳峰 Amon Ho

hoamon@ho600.com

問題導向式學習

程式設計課程多在一年級下學期,所以應已面對過科系的專業問題,針對所學學科中需要試算表(Excel/Numbers/Spreadsheet/…)處理的作業,把它們改用程式語言( Online Python )解決

  • 資料排序
  • 求平均數、標準差、最大值、最小值
  • 找出離群值
  • 製作圖表( Online matplotlib )

應用學科原理的範例:熱的流動問題

  • 問題說明(需求規格說明)
  • 求解說明(技術規格說明)
_images/block9.png

基本的程式構成要素

  • 資料結構
  • 運算子、運算元
  • 控制流程: while, for, if
  • 副函式
def snapshot(lol):
    s = ''
    for line in lol:
        for elm in line:
            s += str(elm) + ','
        s += "\n"
    return s

LoL = [
    [0, 10, 20, 30],
    [4, 0,   0,  0],
    [14,0,   0,  0],
    [24,0,   0,  0],
]

cal_before = ''
cal_after = snapshot(LoL)
while cal_before != cal_after:
    cal_before = cal_after
    for i in range(1, 4):
        for j in range(1, 4):
            _list = []
            try: up = LoL[i-1][j]
            except IndexError: pass
            else: _list.append(up)

            try: down = LoL[i+1][j]
            except IndexError: pass
            else: _list.append(down)

            try: left = LoL[i][j-1]
            except IndexError: pass
            else: _list.append(left)

            try: right = LoL[i][j+1]
            except IndexError: pass
            else: _list.append(right)

            LoL[i][j] = 1. * sum(_list) / len(_list)
    cal_after = snapshot(LoL)
print(cal_after)

其他應用問題

  • 胎壓數據判讀
  • 從GPS位置推斷是否進入危險區域
  • 求反矩陣
  • 線性規劃
  • 深入問題後再結合其他函式庫、 API 、資料庫