初中電腦認知 · 資料處理
Python 編程
編寫真正的 Python 程式:接收輸入、計算、作判斷、重複執行、發出聲音和擲骰子。每個例子都可以直接在投影片上執行,改一改再試。
程式做甚麼?
程式是一連串指令,電腦會按次序執行。大部分程式都會接收輸入、進行處理,然後產生輸出。
輸入
處理
輸出
- 在 Python,
input()從鍵盤讀取資料,print()把資料顯示在屏幕上。 - Python 會由上至下逐行執行。
用 print() 輸出
print() 把資料顯示在屏幕上。文字要放在引號內;數字和算式則不用。
print(3 + 4) → 7
print("3 + 4") → 3 + 4
print("年齡", 13) → 年齡 13
- 用逗號可以一次輸出多項,中間自動加一個空格。
+會把文字連接起來,中間沒有空格。數字要先用str()轉成文字。sep=改變項目之間的分隔符號;end=""令 print 不換行。- 文字中的
\n代表換行。單獨一句print()會輸出一個空行。
+ 和 str() 來組合輸出。從鍵盤輸入
input() 會顯示提示訊息,等待使用者輸入並按 Enter,然後交回輸入的內容。
age = int(input("年齡:"))
height = float(input("身高(米):"))
input()交回的一定是文字(字串),就算輸入的是數字也一樣。- 要計數的話,先用
int()(整數)或float()(小數)包住它。 - 提示訊息最後加一個空格,答案便不會黏住問題。
變數:有名字的盒子
變數就像一個有名字的盒子,用來儲存數值。= 的意思是「把右邊的值放入左邊的盒子」。
score = score + 10的意思是:取出舊的 score,加 10,再放回去。這是賦值,不是數學方程。- 每個盒子只會保留最新的值。
- 命名規則:可用英文字母、數字和 _,不可以數字開頭,不可有空格。
Score和score是不同的變數。 - 用一看便明白的名稱:
total_price比tp好。
age ✔ my score ✘ 2nd ✘ player_2 ✔ print ✘算術運算符
Python 有七個算術運算符。改變 a 和 b,看看每個結果。
**,再到 * / // %,最後 + -,與數學一樣。文字還是數字?int()、float()、str()
每個值都有資料類型。類型決定 + 的作用:數字會相加,文字會連接。
| 類型 | 例子 | 轉換方法 |
|---|---|---|
| int(整數) | 13, -5 | int("13") → 13 |
| float(小數) | 1.58, 2.0 | float("1.58") → 1.58 |
| str(文字) | "小明", "13" | str(13) → "13" |
13 + 1 → 14
"13" + 1 → TypeError 錯誤 ✘
input() 得到的數字要用 int() 或 float();用 + 跟文字連接的數字要用 str()。程式例子:輸入 → 處理 → 輸出
四個短程式,用上了目前學過的所有內容。選一個執行,然後修改它。
挑戰 1:長方形
加一行輸出對角線的長度。提示:(length ** 2 + width ** 2) ** 0.5
挑戰 2:溫度
寫一個相反的程式:華氏轉攝氏。c = (f - 32) * 5 / 9
挑戰 3:夾錢
改為讓使用者輸入服務費百分比,而不是固定一成。
挑戰 4:分鐘
用 // 和 % 把秒數轉換成分鐘和秒。
# 輸入、# 處理、# 輸出。例題:找續
一步一步看程式如何建立:理解問題、計劃、逐部分編寫,最後測試。
練習:輸入與變數
逐級向上:預測 → 填充 → 除錯 → 修改 → 創作。每升一級,提示就少一點。
小測:輸入與變數
字串:連接、重複、量度
字串是放在引號內的文字。每個字元都有一個位置編號,稱為索引,由 0 開始。
"哈" * 3 → "哈哈哈"
len("你好嗎") → 3
word[0] word[-1] word[0:3]
+連接字串;*重複字串。len()計算字元數目,空格也計算在內。word[-1]是最後一個字元。word[a:b]由 a 開始取到 b 之前(不包括 b)。
字串指令
字串有內置的指令(方法)。寫法是:字串、一點,然後指令,例如 text.upper()。
| 指令 | 作用 |
|---|---|
upper() lower() title() | 改變英文大細楷 |
replace(a, b) | 把所有 a 換成 b |
count(x) find(x) | x 出現多少次;x 第一次出現的位置(找不到是 -1) |
center(n, "*") | 把文字放在 n 格的中間 |
text[::-1] | 把文字倒轉 |
name = name.upper()。例題:用戶名稱產生器
切片、字串指令和連接一起使用,把名字變成用戶名稱。
有趣的文字效果
結合 print()、字串指令、迴圈和 time.sleep(),便可以在屏幕上製作文字動畫。
- 先
import time,然後time.sleep(0.5)會暫停半秒。 print(x, end="", flush=True)會在同一行輸出,並即時顯示,這就是打字機效果的秘訣。"*" * n和" " * n可以砌出進度列、樓梯和波浪。center()可以造出整齊的橫額。
for 迴圈來重複。下一個課題會詳細學習迴圈。發出聲音
winsound.Beep(頻率, 時間) 會播放一個音。頻率是音高,單位是赫茲(Hz);時間的單位是毫秒(1000 毫秒 = 1 秒)。
- 先寫
import winsound。Windows 電腦的 Python 已內置這個模組。 print("\a")會在終端機或命令提示字元響鈴。- 把音符放進串列,再用迴圈逐個播放,便成為一段旋律。
延伸:用 ord() 和 chr() 製作密碼
每個字元都以一個數字儲存。ord("A") 得出 65;chr(66) 得出 "B"。把每個字母向後移 3 位,就是凱撒密碼。
練習:文字與聲音
逐級向上:預測 → 填充 → 除錯 → 修改 → 創作。
小測:文字與聲音
關係運算符
關係運算符用來比較兩個值,結果一定是 True(真)或 False(假),稱為布爾值。
| 意思 | 課程寫法 | Python |
|---|---|---|
| 大於 | > | > |
| 大於或等於 | >= | >= |
| 小於 | < | < |
| 小於或等於 | <= | <= |
| 等於 | = | == |
| 不等於 | <> | != |
= 是儲存數值(賦值);要比較就要用兩個:==。課程中的 <> 在 Python 寫成 !=。邏輯運算符:and、or、not
邏輯運算符用來組合 True/False 條件。課程寫作 AND、OR、NOT;Python 則用小楷 and、or、not。
| 意思 | 課程寫法 | Python |
|---|---|---|
| 兩者都是 True 才是 True | AND | and |
| 至少一個是 True 便是 True | OR | or |
| 把 True 和 False 對調 | NOT | not |
作出判斷:if、elif、else
流程控制讓程式選擇執行哪些句子。Python 會由上而下檢查條件,並執行第一個是 True 的部分。
- 條件句最後要加冒號
:。 - 內裏的句子要縮排 4 個空格,縮排表示哪些句子屬於該 if。
elif即「否則如果」。else處理餘下所有情況,不需要條件。
巢狀 if:判斷之中再判斷
當下一條問題要視乎第一個答案才需要問時,便把 if 放在另一個 if 之內。內層分支甚至可以用 input() 再提問。
- 每多一層巢狀便多縮排 4 格。每個
else要與它所屬的if對齊。 - 內層的
input()只會在該路徑執行,使用者不會被問到不相關的問題。 - 如果中間不用再提問,用
and通常更簡單:if age >= 12 and height >= 140:
例題:電影票(巢狀 if)
真實的收費規則需要一個判斷、在其中一條路徑多問一條問題,以及一個適用於所有人的調整。
日常生活中的迴圈
迴圈就是重複執行步驟。有些迴圈重複固定次數(for);有些則重複到條件改變為止(while)。
🏃繞跑道跑 4 個圈
for 次數已知。 for lap in range(4):
🪥逐隻牙齒刷
for 每一項重複一次。 for tooth in teeth:
⏰鬧鐘「再響」
while 仍在睡覺便繼續重複。 while asleep:
🚦交通燈
while 紅 → 綠 → 黃,整天不停重複。 while True:
🍜攪拌麵條直至變軟
while 不知道要攪多少次,每次都要檢查。 while not soft:
🎵副歌唱 3 次
for 固定次數。 for i in range(3):
🔐手機密碼
while 不斷要求輸入,直至密碼正確(或錯誤太多次)。 while code != "1234":
🧺洗衣機過水
for 程式設定了過水的次數。 for rinse in range(3):
🎮遊戲:還有生命便繼續玩
while while lives > 0:
計數迴圈:for 和 range()
for i in range(開始, 停止, 步長): 會為每個數字執行一次縮排了的句子。停止值本身不包括在內。
range(1, 6) → 1 2 3 4 5
range(2, 11, 2) → 2 4 6 8 10
range(5, 0, -1) → 5 4 3 2 1
- 知道要重複多少次時,便用
for。 - 迴圈變數(
i)會依次取得每個值,可以在迴圈內使用。 for letter in "HELLO":會逐個字元重複。
條件迴圈:while
while 條件: 只要條件是 True 便會一直重複。迴圈內必須有東西改變,否則永遠不會停。
- 每次重複之前都會檢查條件。
- 不知道要重複多少次時用
while:密碼、遊戲、「一直加到輸入 0 為止」。 - 無限迴圈永遠不會結束。在這裏按 ■ 停止;在 IDLE 按 Ctrl+C。
n = n + 1 一行再執行,會發生甚麼事?然後按停止。流程控制與迴圈的簡單程式
真正的程式會在迴圈中加入 if、計數器和總和。先閱讀並預測結果,然後才執行。
| 常用模式 | 程式碼 |
|---|---|
| 計數器 | count = count + 1 |
| 累加總和 | total = total + mark |
| 旗標 | correct = True |
| 終止值 | while item != "end": |
「三次機會」中輸入 1111、2222、1234 會輸出甚麼?
已解鎖!第三次輸入正確,迴圈結束時 correct = True。
怎樣修改「雙數」程式來輸出單數?
range(1, 21, 2):由 1 而不是 2 開始。
在「平均分」輸入 0 個學生會出現甚麼問題?
ZeroDivisionError:total / 0。可用 if count > 0: 修正。
例題:分數分析器
一個迴圈,加上累加總和、計數器和「目前最高」:大部分資料處理程式都用這三種模式。
延伸:巢狀迴圈圖案與 break
迴圈內再有迴圈,稱為巢狀迴圈:外迴圈每轉一次,內迴圈便完整執行一遍。break 可提早離開迴圈。
for col in range(4):
print("*", end="")
print()
- 外迴圈 = 行;內迴圈 = 每行的項目。
- 內迴圈之後的
print()用來換行。 break在找到想要的結果後立即停止迴圈。
練習:判斷與迴圈
八個練習,由預測 True/False 到編寫內有 input() 的巢狀 if,以及帶計數器的迴圈。
小測:判斷與迴圈
隨機數
隨機數產生器會產生無法預測的數字。遊戲、抽獎和模擬都會用到。
| 指令 | 結果 |
|---|---|
import random | 載入 random 模組(在最頂寫一次) |
random.randint(1, 6) | 1 至 6 的整數,包括兩端 |
random.random() | 0 至 1(不包括 1)的小數 |
random.choice(list) | 從串列中選出一項 |
觀察隨機性:有沒有規律?
數量少時,隨機結果看來不平均,又會連續出現。數量多時,每個值出現的次數會大致相同,但我們仍然無法預測下一個數。
- 樣本少:棒形高低差別很大,有些數字甚至沒有出現。
- 樣本多:棒形會接近預期值,變得平均。平均值接近 3.5。
- 連續出現很正常。6、6、6 與 2、5、1 出現的機會一樣。
模擬骰子
只需一行:roll = random.randint(1, 6)。加上 if 和迴圈,便可變成遊戲。
算術測驗產生器
隨機數 + input() + if + 迴圈 + 分數變數 = 每次都不同的測驗。
b = random.randint(1, 10)
answer = int(input(...))
if answer == a + b:
score = score + 1
- 用
str(a) + " x " + str(b)組成題目,不用 f-string。 random.choice(["+", "-", "x"])選出運算;if/elif計算正確答案。
練習:隨機數與測驗
由一行隨機數,到結合 while、if/elif 和巢狀 if 的完整計算機選單。
各種簡單的編程專題
選一個專題,載入起始程式碼並執行,然後完成挑戰,把它變成你自己的作品。
延伸:看懂錯誤訊息
出錯是正常的。錯誤訊息會告訴你行號和問題的類型。修正每個錯誤,再執行一次。
| 錯誤 | 常見原因 |
|---|---|
| SyntaxError | 漏了 : ) 或 ";把 == 寫成 = |
| IndentationError | if/for/while 內的句子沒有縮排 |
| NameError | 串錯字,或文字沒有加引號 |
| TypeError | 用 + 連接文字和數字 |
| ValueError | int("abc"):不是數字 |
| ZeroDivisionError | 除以 0 |
Python 練習場
一個空白的地方讓你與全班即場編程。本教材所有內容都可以在這裏使用:輸入、輸出、計算、字串、聲音、if、迴圈和隨機數。
小測:隨機數與專題
Python 速查表
整套教材的重點都在這一頁。按「前往」返回相關投影片。
輸出
print("你好", name)
print("總數:" + str(t))
print("A", end="")輸入
name = input("名字:")
n = int(input("數字:"))
x = float(input("價錢:"))變數與計算
score = score + 1 + - * / // % **
字串
"Ha" * 3 len(s) s[0]
s.upper() s.replace("a", "b")
s.center(20, "*") s[::-1]效果與聲音
import time, winsound time.sleep(0.5) winsound.Beep(440, 500)
比較與組合
> >= < <= == != 課程 = → == <> → != AND OR NOT → and or not
判斷
if mark >= 80:
print("A")
elif mark >= 50:
print("合格")
else:
print("不合格")巢狀 if
if user == "admin":
pw = input("密碼:")
if pw == "py123":
print("歡迎")
else:
print("錯誤")迴圈
for i in range(1, 11):
print(i)
while answer != "yes":
answer = input("? ")隨機數
import random roll = random.randint(1, 6) pick = random.choice(names)
建議教學流程
約十一節 40 分鐘的課,另加 2 至 3 節做小型專題。點選投影片名稱便可前往。
| 課節 | 課程重點 | 投影片 | 學生任務 |
|---|---|---|---|
| 1 | 輸入與輸出 | 用自己的問題寫打招呼程式 | |
| 2 | 變數及賦值中的算術運算 | 例子投影片的挑戰 1–4 | |
| 3 | 例題與練習 | 練習第 1–5 級 | |
| 4 | 處理文字;文字效果;聲音 | 名字橫額 + 一段短旋律 | |
| 5 | 練習:文字與聲音 | 練習第 1–5 級 | |
| 6 | 關係及邏輯運算符;if | 過山車檢查、評級程式 | |
| 7 | 內有輸入的巢狀 if | 為每條路徑寫測試表 | |
| 8 | 日常生活中的迴圈;for 和 while | 乘數表、密碼迴圈 | |
| 9 | 流程控制與迴圈的簡單程式 | 巴士車費(巢狀 if)、炎熱日子 | |
| 10 | 隨機數、規律、骰子 | 擲 600 次骰子統計 | |
| 11 | 算術測驗 | 五題計分測驗;計算機選單 | |
| 12–14 | 各種簡單專題 | 二人專題及向全班簡短示範 |