2024/12 新增考題重點解析(約占 15%)

這份是什麼

教材題庫大約命中 85%,這份是 2024 年 12 月實際考出、教材沒有或問法不同的另外 15%。
44 題(原始編號 02~78),下面依主題重新分組並附解題關鍵。
標示 🔁 = 與教材同觀念但換情境/換問法,通常最容易掉以輕心。

回主文件 → 00-ITS Python 考照重點總整理 全部答案 → 01-模擬題庫解答與勘誤速查


一、資料型態與輸入輸出

Q02 逗號分隔輸出(複選,選 2)

需求:字串要加雙引號、數字不加、以逗號分隔。

  • C print('"{0}", {1}'.format(item, sales))
  • D print('"' + item + '",', sales)print 用逗號分隔會自動補一個空格
  • ❌ A 少了雙引號 ❌ B str + intTypeError

Q04 input 必須指派給變數

print("What is your name?")
name = input()        # ✅ B
print(name)

input("name")(沒存變數)/input(name)(name 未定義 → NameError)/name = input(把函式物件指派給變數)

Q06 🔁 eval 與型態判定

age  = input("Enter your age: ")          # (1) → str
year = input("Enter the four-digit year: ")
born = eval(year) - eval(age)             # (2) → int
message = "You were born in " + str(born) # (3) → str

答案:(1) B str (2) A int (3) B str

Q07 🔁 字典鍵型態不符(會議室版)

rooms = {1: 'Foyer', 2: 'Conference Room'}
room = input('Enter the room number: ')   # str!
  1. rooms 存了哪兩種型態 → C 整數和字串
  2. room 是什麼型態 → D String
  3. 為什麼找不到 → B 不符合的資料類型"1" != 1

Q08 datetime 格式化

d = datetime.datetime(2017, 4, 7)
print('{:%B-%d-%y}'.format(d))

答案:C APRIL-07-17%B 月份全名、%d 兩位日、%y 兩位年)

選項大小寫與實際執行不符

Python 實際輸出是 April-07-17%B 給的是 April,不是全大寫)。官方選項印成 APRIL 應為排版問題。
考試照選 C(辨識點是「月份全名 + 兩位日 + 兩位年」的格式),但別讓同學誤記 %B 會輸出全大寫。

Q09 🔁 平均評分(咖啡版)

  • (1) A float(input("Enter next rating (1-5, -1 for done)")) ← 要能相加必須轉數值
  • (2) C print
  • (3) D format(average, '.2f')

Q34 🔁 format 索引(水果版)

x="oranges"; y="apples"; z="bananas"
print("{1} and {0} and {2}".format(z, y, x))
# 0=bananas, 1=apples, 2=oranges → apples and bananas and oranges

答案:B

Q27 運算子優先序

value1 = 9; value2 = 4
answer = (value1 % value2 * 10) // 2.0 ** 3.0 + value2

2.0**3.0=8.09%4=11*10=1010//8.0=1.01.0+4=5.0
答案:D 5.0

Q28 🔁 負數平方

「a 乘以負一之後再平方」→ b = (-a) ** 2(不加括號會變成 -(a**2)

Q29 截斷小數(複選,選 2)

  • A int(total_deposits / number_of_customers)
  • B total_deposits // number_of_customers

Q32 🔁 字串不可變性

a = 'Config1'; b = a; a += 'Config2'
print(a)   # Config1Config2  ← (1) B
print(b)   # Config1         ← (2) A

Q33 list 的 + 與 *

list_3 = [1,2] + [3,4]      # [1,2,3,4]
list_4 = list_3 * 3

答案:A [1,2,3,4,1,2,3,4,1,2,3,4]


二、切片與清單

Q35 / Q38 🔁 字串切片

alph = "abcdefghijklmnopqrstuvwxyz"

  • alph[3:6]def
  • alph[:6]abcdef

Q37 排除最後 5 位(複選,選 2)

200 位員工、最後 5 位是管理階層 →
D employees[:-5] ✅ E employees[0:-5]


三、判斷式 if / elif / else

Q10 相等比較與 else

  • (1) B if numList == alphaList:
  • (2) A else:elif 要接條件、elseif 不是 Python 關鍵字)

Q12 🔁 比較運算子的正確性(是非題)

03 if num1 == num2:   → ✅ 正確
05 if num1 <= num2:   → ❌「只有小於才印」是錯的,等於也會印
07 if num1 >  num2:   → ✅ 正確
09 if num2 =  num1:   → ✅「無效的比較」正確,= 是指派會語法錯誤

答案:正確 / 錯誤 / 正確 / 正確

Q13 🔁 入場費分層

  • (1) A age >= 5 and school == True:
  • (2) A elif age >= 5 and school == False:
  • (3) C if age <= 17: ← 外層已確認 ≥5,內層只查上限

Q14 🔁 一位數 / 兩位數

  • (1) A if num > -10 and num < 10:
  • (2) B elif num > -100 and num < 100:
  • (3) A else:

Q15 成績轉換(if → elif 階梯)

(1) B if grade >= 90: (2) D elif grade >= 80: (3) D elif grade >= 70: (4) D elif grade >= 65:

Q16 ⭐ 巢狀 if 的層級(超高頻)

(1) if   grade < 100:
    (2) if   grade >= 90:      ← 內層第一個,用 if
    (3) elif grade >= 80:
    (4) elif grade < 80 (5) and grade > 69:
    (6) else:
(7) else:

答案:(1) B (2) B (3) A (4) A (5) B (6) D (7) D

別跟教材 CH05 第 17 題搞混

兩題結構幾乎一模一樣,只有外層條件不同:

  • 本題(新題 Q16)if grade < 100:小於
  • 教材 CH05-17(書上 5-24 頁)if grade <= 100:小於等於

兩題的答題邏輯完全相同(外層 if、內層第一個仍用 if),條件不同不影響作答。
但抄筆記時容易互相污染,看到時先確認是哪一份考題。

Q17 🔁 is 與 == 的四次輸出

False、False、True、True

Q18 安全除法

  • (1) A if numerator is None or denominator is None:(用 or、用 is None
  • (2) A elif denominator == 0:

Q19 DVD 租金

  • (1) B == "n":(未準時 → 多收一天)
  • (2) A == "Sunday":
  • (3) A == "Thursday":

Q20 大小寫檢查(排序題)

name = input("Enter your name: ")
if   name.lower() == name:  ...   # 全小寫
elif name.upper() == name:  ...   # 全大寫
else:                       ...   # 混合

Q22 方根函式(巢狀 else)

def safe_root(a, b):
    (1) if a >= 0:
            answer = a ** (1/b)
    (2) else:
        (3) if b % 2 == 0:
                answer = "Result is an imaginary number"
        (4) else:
                answer = -(-a) ** (1/b)
    return answer

答案:(1) A (2) C (3) B (4) C


四、迴圈

Q21 readline 的 EOF 與空白行 ⭐

05 if line != "":       # 判斷「還沒到檔尾」
06     if line != "\n": # 過濾空白行
07         print(line)

答案:D

Q36 迴圈範圍與平均計算(除錯題)

  • (1) D range(len(employee_pay)) ← 原本 -1 會少跑一次
  • (2) A sum / count ← 原本 // 會捨去小數(邏輯錯誤)

Q39 巢狀 while + for

(1) while x != "QUIT":
        num = 0
    (2) for char (3) in x:
            num += 1

答案:(1) C while (2) A for (3) C in

Q40 🔁 質數(填空題)

  • 第一個空格(if p % i == 0: 之後)→ break
  • 第二個空格(while 最後)→ p = p + 1(不寫會無窮迴圈)

Q42 追蹤輸出行數

product = 2; n = 5
while (n != 0):
    product *= n; print(product); n -= 1
    if n == 3: break

答案:2 行(印出 10、40 後 break)

Q43 計算含特定字母的單字數

  • (1) B word in word_list:
  • (2) D letter in word:

Q44 while 與 break

  • (1) A while (index < 10):
  • (2) break

Q45 🔁 乘法表 2~12

  • (1) B for col in range(2, 13):
  • (2) C for row in range(2, 13):
    (要含 12 → stop 寫 13)

Q47 星號排 E 字形

for row in range(1, **6**)for column in range(1, **5**)
(5 行、最寬 4 個星號)

Q48 加薪但跳過高薪者

  • (1) C for index in range(len(salary_list)):
  • (2) B continue ← 跳過本輪,繼續下一位

Q51 員工識別碼驗證 ddd-dd-dddd

(1) A employee_number = "" (2) B while employee_number != "123" (3) A valid = False (4) B valid = True

觀念:驗證前先預設 False,全部檢查通過才改 True

Q52 ⭐ for-else(Python 特有)

def search(items, term):
    for i in range(len(items)):
        if items[i] == term:
            print("{0} was found in the list.".format(term))
            break
    else:                       # 沒有被 break 才執行
        print("{0} was not found in the list.".format(term))

五、檔案處理

Q54 建立並附加內容

  • (1) A open('myFile.txt', 'a')
  • (2) C file.write

Q55 檢查存在並顯示

  • (1) D os.path.isfile('myFile.txt'):
  • (2) C print(file.read())

Q57 'a' 模式的三個是非

  1. 檔案不存在會自動建立 → ✅ 正確
  2. 資料會被覆寫 → ❌ 錯誤(附加不覆寫,要覆寫用 'w'
  3. close() 之後其他程式可以開啟 → ✅ 正確

Q60 🔁 要建立、要清空、要寫入

答案:D open("local_data", "w")

Q61 ⭐ 'w+' 與 IOError

file_out = open("out.txt", 'w+')   # out.txt 不存在

'w+' 不存在會自動建立 → 不會觸發 IOErrorA. 程式正確執行,不會發生錯誤

Q78 檔案函式排序

def get_first_line(filename, mode):
    if os.path.isfile(filename):        # ①
        with open(filename, 'r') as file:  # ②
            return file.readline()      # ③
    else:                               # ④
        return None                     # ⑤

六、函式

Q24 / Q30 註解語法

  • 單行註解 → #// 是 C/Java、/* */ 是 C/CSS)
  • 正確的文件記錄寫法 → Ddef 內用 # 註解)

Q25 / Q26 🔁 註解是非題(同一題出現兩次)

  1. Python 不檢查註解行的語法 → ✅ 正確
  2. # 是選擇性的 → ❌ 錯誤
  3. comment = "# Return the value" 會被當註解 → ❌ 錯誤(引號內是字串)
  4. return x ** y # ... 是內嵌註解 → ✅ 正確

Q30(2) Docstring 三問

  1. 單行文件字串用什麼符號 → D 三個雙引號 """
  2. 標準位置 → B 函式定義後的第一行(縮排內)
  3. 如何列印 → C print(cube.__doc__)

Q62 定義要對得上呼叫

09 biker = get_name()                              → A. def get_name():
10 calories_burned = calc_calories(distance, burn_rate)
05     calories = miles * calories_per_mile        → F. def calc_calories(miles, calories_per_mile):

答案:A、F

Q63 反轉字串(while 版)

  • (1) B len(backward_name) - 1
  • (2) B backward_name[length]

Q67 🔁 預設參數(薪資函式)

  1. grosspay() 會語法錯誤 → ❌ 錯誤(全部參數都有預設值)
  2. grosspay(salary=50000) 不會回傳任何結果 → ❌ 錯誤(會走到 else 回傳 40*25=1000
  3. grosspay(pieces=500, piecerate=4) 回傳 2000 → ✅ 正確

第 2 小題與課本第 6-12 頁答案相反,見 01-模擬題庫解答與勘誤速查 > ⚠️ 官方勘誤(務必更正) 的爭議說明。

Q68 🔁 預設參數與區域變數

  1. 要改成 def increment_score(score, bonus, points=1): → ✅ 正確
  2. 不改的話只傳兩個參數會錯 → ✅ 正確(TypeError)
  3. 函式內 points = points * 2 會改到外面的 points → ❌ 錯誤(int 不可變 + 區域變數)

Q70 / Q76 🔁 str ** str(同一題出現兩次)

def calc_power(a, b): return a ** b
base = input(...); exponent = input(...)     # 都是 str
result = calc_power(base, exponent)
  1. 第 03、04 行會出錯 → ❌ 錯誤(input 語法正確)
  2. 第 02、05 行會出錯 → ✅ 正確(TypeError)
  3. 會正確輸出 → ❌ 錯誤

Q72 🔁 函式呼叫方式(複選,選 2)

def roomAssignment(student, year):

  • A roomAssignment(name, year=grade)
  • C roomAssignment("Sherlock Sassafrass", 4)
  • ❌ B 變數 studentyear 未定義 → NameError
  • ❌ D 參數名稱是 student 不是 name → TypeError

Q77 🔁 petStore 三個是非

  1. 此函式會傳回一個值 → ❌ 錯誤(只有 print,沒有 return)
  2. 那兩行呼叫無效 → ❌ 錯誤(關鍵字引數順序可任意)
  3. 那兩行呼叫會產生錯誤 → ❌ 錯誤(位置+關鍵字混用合法)

七、模組

Q66 5 的倍數、5~100(複選,選 2)

  • B randint(1, 20) * 5(5 ~ 100)
  • C randrange(5, 105, 5)(5 ~ 100)
  • ❌ A randrange(0,100,5) 從 0 開始且最大只到 95
  • ❌ D randint(0,20)*5 會產生 0

Q69 sys.argv

python Script.py Cheese Bacon Bread
argv[0]=Script.py  argv[1]=Cheese  argv[2]=Bacon  argv[3]=Bread

print(sys.argv[2])D Bacon

Q71 5 ≤ N ≤ 11(複選,選 2)

  • B random.randrange(5, 12, 1)(不含 12)
  • C random.randint(5, 11)(含 11)

Q74 🔁 絕對值 + 取整(複選,選 2)

  • A math.floor(x)(移除小數)
  • B math.fabs(x)(絕對值)

教材 CH07 第 6 題問的是「無條件 進位」→ 答案是 ceil;這題問「移除小數」→ 是 floor。看清楚題目!


八、例外處理與單元測試

Q53 🔁 try 陳述式四個是非

  1. 可以有一個或多個 except → ✅ Yes
  2. 可以只有 finally 沒有 except → ✅ Yes
  3. 可以同時有 finallyexcept → ✅ Yes
  4. 可以有多個 finally → ❌ No

Q58 輸入驗證

  • (1) A try:
  • (2) C except

Q59 try / except / finally 排序

try:
    process()
except:
    logError()
finally:
    displayResult()

Q65 🔁 unittest

(1) B unittest (2) A unittest.TestCase (3) C test_isInstance(self) (4) A self.assertIsInstance(obj, cls, msg=None)

注意:正確拼法是 assertIsInstance(大寫 I),選項有誤植,選最接近且有 self. 的那個。

Q73 assert 三問

  1. 測試兩個是否相同 → A assertEqual(a, b)
  2. 測試兩個物件是否相同 → C assertIs(a, b)
  3. 測試清單中是否存在某值 → D assertIn(a, b)

📌 給老師的授課建議

這 15% 的新題其實有 60% 是「舊觀念換情境」

標 🔁 的題目全部都是教材裡有的觀念,只是換了故事背景(學生 → 會議室、DVD → 租車、咖啡 → 飯店)。
提醒同學:不要背題目,要背「判斷方法」。

建議課堂順序:

  1. 先講 00-ITS Python 考照重點總整理 > 🔥 考前 30 分鐘速記卡 的 20 條
  2. 再用本頁 ⭐ 標記的 5 題(Q16、Q21、Q52、Q61、Q53)當作示範題
  3. 最後讓同學自己做教材題庫,對照 01-模擬題庫解答與勘誤速查

📎 相關文件