核心語法 · 10 道範例題

Python 字串練習題與答案

字串題很快會暴露小錯誤:切片差一位、方法回傳新字串而不是修改原值,或者格式化輸出少了一個空格。這十道題覆蓋最重要的模式。

86 道題在完整題庫中 · 21 道選擇 · 9 道填空 · 56 道輸出

這個主題考什麼

  • 理解索引和切片,切片不包含結束位置。
  • 正確使用 split、join、strip 和 replace 等方法。
  • 用 f-string 構造可讀輸出,並預測精確字元。

常見錯誤

  • 忘記切片不包含結束索引。
  • 以為字串方法會修改原字串。字串是不可變的。
  • 題目要求精確輸出時忽略空格、換行或引號。
範例題

範例題

10

從完整題庫中挑出的 10 道代表題。先自己作答,再展開答案。

  1. 選擇題q0108

    1. 小明從「Python奶茶」這個店名裡取前 3 個字做招牌,"Python奶茶"[0:3] 的結果是?

    1. Pyt
    2. Pyth
    3. hon奶茶
    4. yth
    顯示答案

    答案

    A. Pyt

    解析: 切片含起點、不含終點,[0:3] 取下標 0、1、2,即 P、y、t;下標 3 已經是第四個字元,這是切片最常見的錯法。

  2. 選擇題q0119

    2. 判斷對錯: True 和 False 是 Python 的布林值, 首字母必須大寫。

    1. ✅ 正確
    2. ❌ 錯誤
    顯示答案

    答案

    A. ✅ 正確

    解析: Python 的布林常值是首字母大寫的 True 和 False。寫成 true、false 只是普通名字,會拋 NameError。

  3. 選擇題q0126

    3. 🧋 小明拆分訂單字串,'hello world'.split() 的結果是?

    1. ['hello','world']
    2. ['helloworld']
    3. ['hello world']
    4. ['hello',' ','world']
    顯示答案

    答案

    A. ['hello','world']

    解析: 不傳參數時 split() 把任意一段空白當作一個分隔符,並且會丟掉首尾空白,所以連續空格不會切出空串,這一點和 split(' ') 不同。

  4. 選擇題q0150

    4. 執行 s = "abc"; s[0] = "A" 會怎樣?

    1. 變成 Abc
    2. 拋出 TypeError
    3. 自動變成串列
    4. 只寫入一次
    顯示答案

    答案

    B. 拋出 TypeError

    解析: 字串不可變,按項賦值會拋 TypeError。應改用切片、replace() 或 join 生成新字串。

  5. 填空題q0110

    5. 小明格式化奶茶價格 f"{3.14159:.2f}" 元,輸出是 ___

    顯示答案

    答案

    3.14

    解析: :.2f 保留兩位小數並捨入,3.14159 成為 3.14。格式只作用於冒號前的值,f-string 其餘部分原樣保留。

  6. 填空題q0127

    6. 🧋 小明拆分訂單字串,'1,2,3'.split(',') 回傳 ___ 型別

    顯示答案

    答案

    串列

    解析: split() 總是回傳串列,哪怕只有一個欄位;元素都是字串,數字欄位還要用 int() 或 float() 另行轉換。

  7. 填空題q0185

    7. 把訂單裡的短橫線替換成空格,橫線填什麼方法?

    order = '拿鐵-大杯'
    print(order.____('-', ' '))
    顯示答案

    答案

    replace

    解析: replace('-', ' ') 回傳把每個連字元換成空格的新字串。原 order 字串不變,因為字串不可變。

  8. 輸出預測q0109

    8. 小明截取店名,下面程式碼會列印什麼?

    print("Python奶茶"[:3])
    顯示答案

    答案

    Pyt

    解析: [:3] 省略起點,從下標 0 開始、到 3 之前結束,取到 P、y、t;下標 6 的空格根本碰不到,結果是三個字母。

  9. 輸出預測q0144

    9. 偵錯標籤對編碼 65 的字元使用 repr。會列印什麼?

    print(f"{chr(65)!r}")
    顯示答案

    答案

    'A'

    解析: chr(65) 生成字元 A,!r 使用 repr 表示,會給字串加上引號。所以輸出是帶引號的 'A'。

  10. 輸出預測q0168

    10. `is_pangram('7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog')` 回傳什麼?

    from string import ascii_lowercase
    
    
    def is_pangram(sentence):
        return all(char in sentence.lower() for char in ascii_lowercase)
    
    print(is_pangram('7h3 qu1ck brown fox jumps ov3r 7h3 lazy dog'))
    顯示答案

    答案

    False

    解析: 數字 7 和 3 頂替了字母,t 和 e 始終沒出現,all() 回傳 False。這種數字替代寫法不算全字母句。

常見問題

為什麼 s.strip() 沒有改變 s?

字串不可變。strip 回傳一個新字串;如果需要保留結果,要把它賦給變數。

怎樣連接字串列表?

使用分隔符.join(列表)。列表裡的每一項都必須是字串。

繼續保持練習節奏。

完整題庫會在這個瀏覽器裡記住進度,支援依主題篩選,並包含每日一題和錯題重練。

開啟完整練習