易錯題自我測驗卡(40 題)
使用方式
每張卡片預設是摺疊的 —— 先自己想答案,點一下標題才會展開解答。
建議做法:第一輪全做 → 記下答錯的編號 → 隔天只重做錯的 → 考前一天再掃一次。📱 手機上一樣可以點開,適合通勤時複習。
計分表(自己填)
| 輪次 | 日期 | 答對題數 | 答錯編號 |
|---|---|---|---|
| 第 1 輪 | ____ | ___ / 40 | |
| 第 2 輪 | ____ | ___ / 40 | |
| 第 3 輪 | ____ | ___ / 40 |
🟦 CH01–02 型態與運算子
Q1.
age = input("Enter your age: ")之後,age的資料型態是?
str(字串)
input()的回傳值永遠是字串,即使使用者輸入的是數字。
要拿來運算必須先int()/float()/eval()。
Q2.
print("You have worked for" + (int(end) - int(start)) + "hours")會發生什麼事?TypeError —— str 不能直接
+int。
正確寫法:print("..." + str(int(end) - int(start)) + "hours")
Q3. 「即使使用者輸入小數,也必須轉成整數計算」該用哪個?
int(input("..."))
float()不會變整數;不加轉型會是字串。
Q4.
type(+1E10)、type(5.0)、type("True")、type(False)分別是?float、float、str、bool
陷阱:"True"有引號 → 是字串不是布林值;1E10科學記號 → float。
Q5. 寫出六類運算的優先順序(由先到後)
括弧 → 指數
**→ 正負號+x -x ~x→ 乘除* / // %→ 加減+ -→ 比較 →not→and→or
⚠️ 陷阱:not排在「比較」之後,不是跟正負號同層。所以not a == b等於not (a == b)。
與正負號同層的是~(位元反轉),不是not。
Q6.
a=24; b=7; ans = (a % b * 100) // 2.0 ** 3.0 - b,ans是多少?30.0
24%7=3→3*100=300→2.0**3.0=8.0→300//8.0=37.0(有 float → float)→37.0-7=30.0
Q7. 公式「b 等於 a 乘以 −1 之後再平方」的正確寫法?
b = (-a) ** 2
若寫-a ** 2會被解讀為-(a ** 2),因為指數優先於負號。
Q8.
==和is差在哪裡?
==比較值 / 內容是否相同is比較是否為同一個物件(記憶體位址)numList=[1,2]; alphaList=[1,2] numList == alphaList # True (內容一樣) numList is alphaList # False (不同物件)
Q9. 以下輸出是什麼?
a = 'Config1' b = a a += 'Config2' print(a); print(b)
Config1Config2和Config1
字串是不可變物件,a += ...會建立新物件讓 a 指向它,b 仍指向原本的'Config1'。
Q10. 要「去除平均值的小數部分」,有哪兩種正確寫法?
int(total / count)和total // count
❌total ** count是指數運算。
🟩 CH03 字串與清單
Q11.
alph = "abcdefghijklmnopqrstuvwxyz",alph[3:6]和alph[:6]各是?
def和abcdef
切片[start:stop]不包含 stop;省略 start 預設從 0 開始。
Q12. 清單有 60 人,最後 3 位是幹部。要取得「除了幹部以外的所有人」,寫法?
classroom[:-3]或classroom[0:-3]
因為切片不含 stop,-3正好排除最後 3 個。
Q13. 反轉字串最短的寫法是?
alph[::-1]
迴圈版:for index in range(len(name)-1, -1, -1)
Q14.
list_3 = [1,2] + [3,4],list_4 = list_3 * 3,list_4是?
[1,2,3,4,1,2,3,4,1,2,3,4]
+是串接、*是整串重複(不是逐元素相乘、也不是巢狀)。
Q15.
aList = [0,1,2,3,4],print(4 in aList)印出什麼?
True
in回傳布林值,不是索引也不是元素。
Q16. ⭐ 為什麼這段程式永遠找不到房間?
rooms = {1: 'Foyer', 2: 'Conference Room'} room = input('Enter the room number: ') if not room in rooms: print('Room does not exist.')資料類型不符。字典的鍵是整數
1,但input()得到的是字串"1",在 Python 中"1" != 1。
修正:room = int(input(...))
🟨 CH04 輸入輸出與檔案
Q17.
"{1} and {0} and {2}".format(z, y, x)中,{1}對應哪個變數?
y
format()的引數索引從 0 開始:{0}=z、{1}=y、{2}=x。
Q18. 「姓名靠左對齊、寬 20」和「平均分數格式 XXX.XX」的格式字串?
%-20s和%6.2f
XXX.XX= 左 3 位 + 小數點 + 右 2 位 = 總寬 6、小數 2 位。
Q19. 輸出要求:字串加雙引號、數字不加、逗號分隔。哪兩種寫法對?
- ✅
print('"{0}", {1}'.format(item, sales))- ✅
print('"' + item + '",', sales)← print 用逗號會自動補空格- ❌
print(item + ',' + sales)→ TypeError
Q20. ⭐ 開檔模式:
w、a、r、w+的差別?
模式 不存在 已存在 r報錯 唯讀 w建立 清空覆寫 a建立 附加結尾 w+建立 清空(可讀寫) 題目說「已有內容要刪除」→
w;說「加到最後」→a。
Q21. ⭐
readline()讀到「檔案結尾」和「空白行」分別回傳什麼?
- 檔案結尾 (EOF) →
""(空字串)- 空白行 →
"\n"所以「判斷還沒到檔尾」寫
if line != "",「過濾空白行」寫if line != "\n"。
Q22. 檢查檔案是否存在、讀取全部內容、寫入內容的正確方法各是?
os.path.isfile(path)(要先import os)
file.read()
file.write("...")
❌os.exist、os.find、file.add、append(都不存在)
Q23.
print('{:%B-%d-%y}'.format(datetime.datetime(2017,4,7)))輸出?考試選
APRIL-07-17;但 Python 實際輸出是April-07-17(%B只有首字大寫,官方選項印成全大寫是排版問題)。
%B月份全名、%d兩位日、%y兩位年。(%A才是星期全名)
🟧 CH05 判斷式與迴圈
Q24. ⭐⭐ 這段的 (1)~(3) 該填 if 還是 elif?
(1)___ grade <= 100: (2)___ grade >= 90: print("A") (3)___ grade >= 80: print("B")(1)
if(2)if(3)elif
🔑 進入巢狀內層時,第一個判斷要重新用if,同層的後續才用elif。這是全書最常錯的一題。
Q25. 判斷 1 位數 / 2 位數 / 2 位以上,三格該怎麼填?
(1) if num > -10 and num < 10: digits = "1" (2) elif num > -100 and num < 100: digits = "2" (3) else: digits = ">2"由小範圍往大範圍排,最後用
else收剩下的。
Q26. 入場費:5 歲以上學生 10 元、5–17 歲非學生 20 元、17 歲以上非學生 50 元。內層怎麼寫?
if age >= 5 and school == True: rate = 10 elif age >= 5 and school == False: if age <= 17: rate = 20 # 外層已確認 >=5,內層只查上限 else: rate = 50
Q27.
range(2, 13)會產生哪些數字?做「2 到 12 的乘法表」要怎麼寫?產生 2, 3, …, 12(含 start、不含 stop)
要含 12 → stop 必須寫 13。
2~9 的九九乘法 →range(2, 10)
Q28. ⭐ 走訪整個清單的索引,正確寫法是?
for index in range(len(mylist)):
❌range(len(mylist) - 1)→ 會少跑最後一個元素(除錯題最常見的答案)
❌size()不是 Python 函式
Q29.
break、continue、pass各做什麼?題目關鍵字怎麼對應?
關鍵字 作用 題目關鍵字 break立刻跳出迴圈 「找到就停止」 continue跳過本輪,繼續下一個 「不符合就略過這一位」 pass什麼都不做(佔位) 「暫時保留空區塊」
Q30. ⭐
for ... else的 else 什麼時候會執行?只有當迴圈「沒有被
break中斷」、完整跑完時才執行。
用途:「全部找完都沒找到」→ 印出「找不到」訊息。for i in range(len(items)): if items[i] == term: print("found"); break else: print("not found")
Q31. 這段會印出幾行?
product = 2; n = 5 while (n != 0): product *= n; print(product); n -= 1 if n == 3: break2 行(印出 10、40)
第 1 圈:2×5=10,n→4;第 2 圈:10×4=40,n→3,n==3成立 → break。
Q32. 質數判斷程式中,
if n % i == 0:之後要填什麼?while 迴圈最後要填什麼?
break(已確定不是質數,不必再檢查,省運算)
n = n + 1(計數器遞增,不寫會無窮迴圈)
另外注意:is_prime = True必須放在 while 迴圈內每輪重設。
Q33. 迴圈除錯題最常見的 4 個錯誤是?
- 條件式後面忘記冒號
:- 用
[ ]包條件 →while [i < 10]❌numList(i)應為numList[i](索引用中括號)if a = b:→ 應為==;<>Python 3 不支援,用!=
🟪 CH06 函式與註解
Q34. 呼叫是
biker = get_name()、calc_calories(distance, burn_rate),函式內用miles * calories_per_mile。定義該怎麼寫?def get_name(): # 呼叫沒傳引數 → 不能有參數 def calc_calories(miles, calories_per_mile): # 參數名 = 函式內用的變數名🔑 解題兩步:① 看呼叫傳幾個 → 決定參數個數 ② 看函式內部用什麼名字 → 決定參數名稱
Q35. 關於預設參數,下列哪些正確?
- 一旦某參數有預設值,右側所有參數也必須有預設值 → ✅
- 3 個必要參數卻只傳 2 個 → TypeError ✅
- 只傳兩個引數時,第三個參數會是
None→ ❌(會用預設值,沒預設值就報錯)- 函式內修改 int 參數會改到外面的全域變數 → ❌(int 不可變 + 區域變數)
Q36.
def roomAssignment(student, year):,哪些呼叫是對的?
- ✅
roomAssignment(name, year=grade)(位置 + 關鍵字)- ✅
roomAssignment("Sherlock", 4)(兩個位置引數)- ❌
roomAssignment(student, year)→ 變數未定義,NameError- ❌
roomAssignment(year=6, name="Minnie")→ 參數叫student不叫name,TypeError🔑 關鍵字引數順序可任意,但名稱必須一致。
Q37. ⭐ Docstring 三問:用什麼符號?放哪裡?怎麼列印?
- 三個雙引號
"""..."""- 緊接在
def之後的第一行(要縮排)print(cube.__doc__)← 前後各兩個底線(課本 6-12 頁答案 A/A/B 是錯的,正確是 D/B/C)
Q38. 關於註解的四個是非題
- Python 不檢查註解行的語法 → ✅ 正確
- 每行註解的
#是選擇性的 → ❌ 錯誤(一定要有)comment = "# Return the value"會被當註解 → ❌ 錯誤(引號內是字串)return x ** y # raise x to y是合法內嵌註解 → ✅ 正確Python 只用
#;//、/* */、<!-- -->都是別的語言。
🟥 CH07–08 模組與例外處理
Q39.
randint和randrange的範圍差在哪?產生 0~10 的整數該用哪個?
randint(a, b)→ a ≤ N ≤ b(含結尾)randrange(a, b, s)→ a ≤ N < b(不含結尾)0
10 →11 →random.randint(0, 10)(課本 7-12 頁印 A 是錯的,正確是 D)
5randint(5, 11)或randrange(5, 12, 1)
Q40.
math.floor/math.ceil/math.fabs各是什麼?題目怎麼分辨?
fabs(x)→ 絕對值floor(x)→ 無條件捨去(題目說「移除小數 / 取整」)ceil(x)→ 無條件進位(題目說「無條件進位」)⚠️ 教材 CH07-6 問「進位」→
ceil;新題 Q74 問「移除小數」→floor。兩題長很像!
Q41.
python Script.py Cheese Bacon Bread執行後,sys.argv[2]是什麼?
Bacon
argv[0]= 腳本名稱Script.py,argv[1]才是第一個參數。
Q42. ⭐ 關於
try陳述式的四個是非
- 可以有一個或多個
except→ ✅ Yes- 可以只有
finally沒有except→ ✅ Yes- 可以同時有
finally和except→ ✅ Yes- 可以有多個
finally→ ❌ No(只能一個,且放最後)
Q43. 這段程式的錯誤屬於哪一類?
def calc_power(a, b): return a ** b base = input(...); exponent = input(...) result = calc_power(base, exponent)執行階段錯誤(TypeError)
input()回傳 str,str ** str不支援。程式中途爆掉,所以「會正確輸出」是錯的。
修正:base = eval(input(...))或int(input(...))
Q44.
open("out.txt", 'w+')但 out.txt 不存在,會發生什麼?正常執行,不會發生錯誤。
'w+'在檔案不存在時會自動建立,因此不會觸發IOError,接著會執行else區塊。
Q45. 單元測試四格填空
import unittest # (1) unittest class TestIsInstance(unittest.TestCase): # (2) 繼承 unittest.TestCase def test_isInstance(self): # (3) 名稱必須 test 開頭 self.assertIsInstance(obj, cls) # (4) 用 self. 呼叫測試執行器只會執行以
test開頭的方法。
Q46. 四個 assert 方法各測什麼?
目的 方法 兩個值相同 ( ==)assertEqual(a, b)兩個物件相同 ( is)assertIs(a, b)清單中存在某值 ( in)assertIn(a, b)是某類別的實例 assertIsInstance(obj, cls)
✅ 全部做完了?
- 答對 40+:狀態很好,考前掃 03-考前速查表(A4列印用) 就夠了
- 答對 30–39:把錯的章節回頭看 00-ITS Python 考照重點總整理 對應段落
- 答對 30 以下:建議整份 00-ITS Python 考照重點總整理 重讀一遍,再做一次本測驗
已經有間隔重複版本了
Spaced Repetition 外掛已安裝完成,這些題目也轉好了 → 05-SR閃卡-ITS Python(47 張,依章節分成 6 個牌組)。
用法看 06-閃卡使用說明。
差別:本頁適合一次全掃,閃卡版適合每天 5 分鐘由演算法幫你排程。
🔗 00-ITS Python 考照重點總整理 01-模擬題庫解答與勘誤速查 02-2024新增考題重點解析 03-考前速查表(A4列印用)