公務人員特種考試計算機大意108 年第 34 題單選題
針對下列 Python 程式,執行 test(3) 後,其輸出為下列何者?
def f(a, b):
if a>b: a = a + b
else: b = b -a
return b, a
def test(x):
x, y = f(x, x+3)
print(x+y)
C正確答案
f(3,6):3<6 走 else,b=6-3=3,回傳 (3,3),x+y=6。
為什麼答案是 C
f(3,6):a=3,b=6,a<b 走 else,b=6-3=3,return (3,3);test 中 x,y=(3,3),印 x+y=6。
載入中…
完整詳解
Pro · 無限重點 f(3,6):3<6 走 else,b=6-3=3,回傳 (3,3),x+y=6。
test(3) → f(3,6) → a=3,b=6,a<b 故 b=b-a=3 → return (3,3) → x=3,y=3 → 印 6。
逐選項分析
A✕
若誤以為 b=b-a 後回傳 b,a 都變 0,才會得 0。實際 b=3、a=3。
B✕ 陷阱
只看到單一變數 3 就填,忽略 print 的是 x+y 兩數相加。
C✓ 正確
f(3,6):a=3,b=6,a<b 走 else,b=6-3=3,return (3,3);test 中 x,y=(3,3),印 x+y=6。
D✕ 陷阱
若誤判走 if 分支 a=a+b=9 並把 9 當答案,或誤以為回傳順序反轉,才得 9。
f(3,6) 執行追蹤
| 步驟 | a | b | 動作 |
|---|
| 進入 f | 3 | 6 | 判斷 a>b?否 |
| else 分支 | 3 | 6-3=3 | b=b-a |
| return | 3 | 3 | 回傳 (b,a)=(3,3) |
| test 接收 | x=3 | y=3 | print(x+y)=6 |
陷阱在於 f 回傳順序是 (b,a) 而非 (a,b),且 test 用 x,y=f(...) 重新指派 x。若沒注意回傳順序或 else 分支是改 b 不是改 a,很容易算錯分支或最終輸出。