MIT 6.100L
Lecture 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
產生新猜測,重複直到夠近。
初始猜測 g:
3.00
誤差 7.00
目標 x:
16
真實 √x = 4
下一步迭代 ▶
重置
自動跑 5 步
按「下一步」觀察 g 如何被平均修正拉向 4。滑桿可改初始猜測,體驗不同起點的收斂速度。
步
g
g*g
x/g
(g+x/g)/2
收斂視覺化
藍點=g;橘點=x/g;灰虛線=真實答案 4。兩者互相拉扯、快速收斂。
認知亮點:實作範例 + 漸退
先看完整 3 步表格(實作範例),再用滑桿自己改 g 值、按步驟預測下一個平均數。從「看懂」到「自己做」。
平均能讓猜測更快靠近答案
隨便猜也會收斂
04 / 13
演算法是什麼
流程圖
拖拉排序
演算法的三個必要條件
1
有限步驟的序列
每個步驟都是簡單可執行的操作
2
流程控制
決定何時做哪一步(循序/分支/重複)
3
終止條件
知道何時停,才是演算法
小測:哪個不是演算法?
烤蛋糕 7 步驟含牙籤測試
一直烤、永遠不檢查
平方根猜與修正
拖拉:把烤蛋糕演算法排回正確順序
打亂
檢核順序
提示:終止檢查(牙籤)必須在重複之前,否則會無限烤焦!
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
語言的面向
判斷分類
對比表格
Primitive
Syntax
Static
Semantics
拖拉配對:把例子拖到正確類別
語法錯誤 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 # ↑ 少運算子
看檢測時機
直譯器在執行前就能擋下,報 SyntaxError。
② 靜態語意錯誤
語法對、但無意義
"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
int
float
9.0
int
float
True
bool
int
09 / 13
轉型 Casting
滑桿視覺化
即時回饋
滑桿實驗室:截斷 vs 四捨五入
float 值:
3.90
int(3.9)=3
int(x)
3
直接截斷
round(x)
4
四捨五入
float(x)
3.9
加 .0
int(3.9) 會變 3 不是 4
int 會四捨五入
視覺化:截斷
藍條=原數;紅線=int 截斷位置;綠點=round 結果。拖滑桿看差異。
常見轉換
float(3) → 3.0 int(3.9) → 3
# 截斷!
round(3.9) → 4 int(7.9) → 7 float(round(7.2)) → 7.0
試 float(123)
試 int(7.9)
試 round(7.9)
隱式轉換
有些運算會自動轉型,例如
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/3
5//3
5%3
2**3
>>> 3+2 5
# int
觀察:
i/j
恆為 float;
//
是 floor;
%
是餘數。
小測
type(4*3) = ?
int
float
type(4.0*3) = ?
int
float
int(1/2) = ?
0
0.5
大概念
系統性地把
複雜運算式替換成單一值
,一步一步求值。
這就是運算思維的「抽象化」起點。
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)
為何要命名?
重用、易讀、易改。好名字=可維護性。
a, c 最好
pi, radius, area 最好
對比:好 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=200
後
feet
仍舊。
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) 的值最接近?
0.0625
9
108
Q2
int(7.9) 的結果是?
7
8
7.9
Q3
哪個是靜態語意錯誤?
"hi"5
"hi"+5
Q4
meters=100; feet=3.28*meters; meters=200 後 feet=?
328.08
656.16
Q5
演算法必須包含?
終止條件
越快越好
重做測驗
全部答對會顯示完成徽章 ✨
回到封面
列印 / 存 PDF
← 上一頁
下一頁 →
1 / 13
🎉 已完成 13 頁
封面
全螢幕