MIT 6.100LLecture 01|運算思維 × Python 起手式
← →空白互動簡報・13 頁
01 / 13 WELCOME・課程導航
視覺化引導雙重編碼
MIT OPENCOURSEWARE ・ ANA BELL
運算,
就是會執行的食譜。
本節把「計算」拆成可被機器執行的步驟,帶你從 食譜→演算法→程式→Python 一次打通。每一頁都是一個可操作的認知小實驗。
⏱ 25–35 分鐘
本節你會帶走
① 什麼是演算法的三要素 ② 儲存程式電腦如何動 ③ 語言的四層次 ④ 物件/型別/運算/變數綁定
COGNITIVE DESIGN
每一頁=一個組塊
視覺+操作+即時回饋,降低認知負荷、強化記憶提取。
怎麼用這份簡報最有效?
① 先拖拉/滑桿玩一次② 再按「檢核」看回饋③ 最後用按鈕自我測驗
提示:用 ← → 或下方按鈕翻頁;每頁右上標示本頁使用的認知策略。
食譜 → 演算法 → 程式
🧁
食譜
人類看懂
📋
演算法
步驟+流程+終止
💻
程式
機器執行
1 混合乾粉 —— 循序 2 加入蛋與牛奶 —— 循序 3 倒入烤盤 4 以 175°C 烤 5 分鐘 5 牙籤測試 —— 判斷 6a 若未熟 → 回到 4 —— 流程控制 6b 否則出爐 —— 終止條件 7 開吃!
快速自我檢核
電腦每秒可做「上百億次簡單運算」+「記住結果」。所以重點不是算得快,而是:
02 / 13 知識的兩種長相
分類視覺化提取練習拖拉操作
敘述性 vs 指令性
敘述性是「是什麼」的事實;指令性是「怎麼做」的食譜。程式設計就是把指令性知識寫成可執行的食譜
拖拉分類:放到正確的鍋子
🍲 敘述性 Declarative
例:鹽是鹹的、√16=4
👩‍🍳 指令性 Imperative
例:先猜 g,再算 (g+x/g)/2
為什麼要分?
電腦只會「照你說的做」。你給的是指令性序列,它才會一步步產生敘述性事實(答案)。
指令
猜 g → 檢查 g*g → 平均修正
事實
y*y = x 的 y
小測:哪個是程式在做的事?
認知策略:分類+對比幫助形成組塊,拖拉時的動作記憶會加深區別。
03 / 13 數值範例・猜與修正
收斂視覺化滑桿操作
猜 → 驗 → 修:y*y = x
g=3, x=16 開始:若 g*g 不夠靠近 x,就用 (g + x/g)/2 產生新猜測,重複直到夠近。
誤差 7.00
真實 √x = 4
按「下一步」觀察 g 如何被平均修正拉向 4。滑桿可改初始猜測,體驗不同起點的收斂速度。
gg*gx/g(g+x/g)/2
收斂視覺化
藍點=g;橘點=x/g;灰虛線=真實答案 4。兩者互相拉扯、快速收斂。
認知亮點:實作範例 + 漸退
先看完整 3 步表格(實作範例),再用滑桿自己改 g 值、按步驟預測下一個平均數。從「看懂」到「自己做」。
04 / 13 演算法是什麼
流程圖拖拉排序
演算法的三個必要條件
1
有限步驟的序列
每個步驟都是簡單可執行的操作
2
流程控制
決定何時做哪一步(循序/分支/重複)
3
終止條件
知道何時停,才是演算法
小測:哪個不是演算法?
拖拉:把烤蛋糕演算法排回正確順序
提示:終止檢查(牙籤)必須在重複之前,否則會無限烤焦!
05 / 13 儲存程式電腦
動態記憶體按鈕步進
程式,也是資料
1940 年代前是固定程式電腦;之後的儲存程式電腦把指令當資料存在記憶體,靠解譯器逐一執行,並用「測試」改變流程。
馮紐曼架構・點擊任一區塊
🧠
MEMORY
3456…7894
🎛️
CONTROL UNIT
program counter
🧮
ALU
做加法/比較
🖨️
INPUT / OUTPUT
Print
點擊區塊看說明,右側一步步執行真實的記憶體指令。
三大原始指令家族
① 算術/邏輯② 測試③ 搬運資料
Turing 證明:只要 6 個極簡原語就能算一切;現代語言只是更方便的原語組合。
記憶體動畫・一步步執行
PC → —
Add 3456 3457 → 3+4 Add 7889 7890 → 5+2 Store 3458 Store 7891 Compare 3458 7891 Print
觀察:ALU 做運算 → Store 搬運 → Compare 測試 → Print 輸出。程式與資料都在同一個 Memory。
輸出:—
06 / 13 語言的面向
判斷分類對比表格
拖拉配對:把例子拖到正確類別
語法錯誤 Syntax
靜態語意錯誤
句句有差
"hi"*5 — 合法Syntax OK
"hi"5 — 非法Syntax Error
"hi"+5 — 語法對、語意錯Static Error
"The chicken is ready to eat."語意多重
程式只有一種語意,但可能不是你想要的那一種。
快速判斷
點擊判斷對錯,即時回饋。
"I are hungry" 屬於?
程式 "hi"+5 為何錯?
07 / 13 哪裡會出錯
錯誤診斷按鈕揭露
① 語法錯誤
最常見、最容易抓
"hi"5 # ↑ 少運算子
② 靜態語意錯誤
語法對、但無意義
"hi"+5 # 字串 + 整數
③ 語意與意圖不合
沒報錯,但答案錯
# 想算平均卻寫成 (x+g)/2 # 順序錯? # 或無限迴圈
按鈕診斷:點選會發生什麼?
忘記冒號、括號
程式一直跑不結束
除錯心法
先讓程式能跑(解語法),再讓程式合理(解靜態語意),最後讓程式正確(對齊意圖)。
可執行的 → 有意義的 → 正確的 Syntax → Static → Intent
08 / 13 物件・型別
雙重編碼拖拉分類
一切皆物件,型別決定能做什麼
30 能加減乘除,'Ana' 能切片但不能除以數字。型別是能力的邊界。
拖拉:把物件丟進正確型別箱
int
float
bool
str / None
Scalar vs Non-scalar
Scalar 不可再分
int, float, bool, NoneType
5, 3.27, True, None
Non-scalar 有結構
list, dict, str
"abc", [1,2], {k:v}
# 用 type() 看型別 >>> type(5) int >>> type(3.0) float
試試:猜型別
1234
9.0
True
09 / 13 轉型 Casting
滑桿視覺化即時回饋
滑桿實驗室:截斷 vs 四捨五入
int(3.9)=3
int(x)
3
直接截斷
round(x)
4
四捨五入
float(x)
3.9
加 .0
視覺化:截斷
藍條=原數;紅線=int 截斷位置;綠點=round 結果。拖滑桿看差異。
常見轉換
float(3) → 3.0 int(3.9) → 3 # 截斷! round(3.9) → 4 int(7.9) → 7 float(round(7.2)) → 7.0
隱式轉換
有些運算會自動轉型,例如 5/3 結果必為 float。下一頁直接玩運算子。
10 / 13 運算式
前後對比滑桿即時演算
把複雜算式壓成一個值
運算式 <物件> <運算子> <物件> 會有值與型別,Python 只存值、不存算式。
互動:改括號,看結果如何變
不加括號
4+2*6-1 = 15
加括號
(4+2)*6-1 = 35
滑桿:揭露優先序
先算 ** → 再 * / % → 最後 + -(由左到右)
括號會覆蓋預設順序:(4+2)*6-1 = 35
拖動滑桿,像拉窗簾一樣對比「有括號 vs 無括號」。
運算子實驗室
>>> 3+2 5 # int
觀察:i/j 恆為 float;// 是 floor;% 是餘數。
小測
type(4*3) = ?
type(4.0*3) = ?
int(1/2) = ?
大概念
系統性地把複雜運算式替換成單一值,一步一步求值。
這就是運算思維的「抽象化」起點。
11 / 13 變數
盒子模型拖拉綁定
變數是貼標籤,不是解方程式
數學的 a+2 = b-1 是關係;CS 的 a = b+1先算右邊、再貼到左邊名字上
互動盒子:把值拖進變數
把下方值拖到盒子,或用按鈕自動示範
pi
355/113
radius
2.2
area
pi*r²
pi = 355/113 radius = 2.2 area = pi*(radius**2)
為何要命名?
重用、易讀、易改。好名字=可維護性。
對比:好 vs 壞命名
難讀
a=355/113*(2.2**2) c=355/113*(2.2*2)
好讀
pi=355/113 radius=2.2 area=pi*radius**2
今天、明天、明年,你和別人都讀得懂。
試試:哪個合法?
x = 6
6 = x
x*y = 3+4
12 / 13 循序執行・再綁定
步進追蹤按鈕時序
步進器:看變數如何被覆蓋
步驟 0/4
pi = 3.14 radius = 2.2 area = pi*(radius**2) # 15.1976 radius = radius+1 # 3.2,但 area 還沒重算!
pi
radius
area
按下一步,觀察 radius 改變但 area 不會自動變,除非重新執行那一行。
循序是鐵律
每一行由上往下執行,沒叫它重算就不會變。這解釋了為何 meters=200feet 仍舊。
meters = 100 feet = 3.2808*meters # 328.08 meters = 200 # feet 還是 328.08!
挑戰:交換 x 與 y(需 temp)
下面程式有 bug,拖 temp 盒子來修復正確順序。
x
1
y
2
temp
大概念
程式只做你叫它做的事。想讓 area 更新,就要再執行 area = pi*(radius**2)
13 / 13 總結・帶得走的四件事
總結測驗
物件有型別
型別決定能做什麼;type() 可檢查
運算式有值
複雜算式壓成單一值與型別
變數是綁定
= 是指派,先算右邊再貼左邊
循序執行
一行一行來,重算才會更新
本節金句
程式只做你叫它做的事。把大問題切成小步驟、給好名字、讓每一步都可被檢查。
對應到練習:PSET、必做指間練習、選做、Office Hours、Piazza、Lecture、Recitation。
學習路徑
概念
Lecture
練習
PSET/指間
提問
Piazza/OH
重複
Recitation
總結測驗・5 題快問快答
0/5
Q1 (13-4)/(12*12) 的值最接近?
Q2 int(7.9) 的結果是?
Q3 哪個是靜態語意錯誤?
Q4 meters=100; feet=3.28*meters; meters=200 後 feet=?
Q5 演算法必須包含?
全部答對會顯示完成徽章 ✨
1 / 13