文字處理
把前面十一課接起來,做一件真的事。 · ⏱ 約 30 分鐘
你會學到三件事
- 字串常用的幾個方法
split 把一句話拆成一串字
- 推導式:把一串變成另一串
開始之前
這是入門的最後一課。它沒有太多新概念——
它是把清單、迴圈、函式接起來,做一件你真的可能會做的事。
🟢 先把編輯器打開,跟著下面一起做:跟著做
一、字串的方法
文字後面加一個點,就有一堆現成的可以用:
1s = "Hello, World"2print(s.upper()) # HELLO, WORLD3print(s.lower()) # hello, world4print(len(s)) # 12
積木盤上這兩顆寫著「… 轉大寫」與「… 轉小寫」。
⚠️ 它們都回傳新的,不會改到 s。
🚫 這一段是反例——課文在說不要這樣寫,別照著拉。
1s.upper() # 算出來了,而沒有人接住它 → 白做2s = s.upper() # ✅
字串在 Python 裡是不可變的——所有「改」字串的方法,
其實都是「做一個新的」。
常用的:
|
做什麼 |
s.strip() |
去掉頭尾的空白(處理輸入時幾乎一定要) |
s.replace(a, b) |
把 a 換成 b |
s.startswith(x) / endswith(x) |
開頭/結尾是不是 x |
s.find(x) |
x 在第幾個位置(找不到回 -1) |
x in s |
x 在不在裡面 |
二、split:拆成一串
要把一段文字拆開,用 .split():
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1print(s.split(", ")) # ['Hello', 'World']
積木上這一顆寫著「把 … 用 … 切開」。
一段文字 → 一個清單。這是處理輸入最常用的一招:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1line = "3 1 4 1 5"2parts = line.split() # ['3','1','4','1','5']3nums = [int(x) for x in parts] # [3, 1, 4, 1, 5]
⚠️ split() 不給參數就是按空白拆,而且連續的空白算一個。
反過來是 join:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1print(", ".join(["a", "b", "c"])) # a, b, c
⚠️ 是「用什麼連」.join(要連的東西),順序很容易記反。
三、推導式
一行把一串換成另一串:
1words = ["a", "bb", "ccc"]2print([len(w) for w in words]) # [1, 2, 3]
積木上它是一整顆,讀起來就是它的形狀:
「收集 … 對每一個 … 取自 … 只留 …」——最後那一格是篩選(if),可以空著。
它就是這四行壓成一行:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1result = []2for w in words:3 result.append(len(w))
從右邊往左邊讀:「走過 words 的每一個 w,把它換成 len(w)」。
加上篩選:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1[w for w in words if len(w) > 1] # ['bb', 'ccc']
⚠️ 短的時候才用它。 兩層迴圈、又有 if/else 的話,
寫成一般迴圈會好讀很多。
推導式是「把一串變成另一串」的寫法,
不是「用比較少的字寫迴圈」的寫法。
四、串起來
把前面那幾個接起來用:
🔎 這一段是試一下——打了看結果就好,不要留在程式裡。
1line = input()2words = line.strip().split()3lengths = [len(w) for w in words]4print(max(lengths))
四行裡面用到了:輸入(第 3 課)、方法鏈、清單(第 8 課)、
推導式、內建函式。這就是一支小 Python 程式平常的樣子。
完成的樣子
這一課的參考做法——程式碼每一行的號碼,就印在對應的那塊積木上。
1s = "Hello, World"2print(s.upper())3print(s.lower())4print(len(s))5print(s.split(", "))6print(s.replace("World", "Python"))7words = ["a", "bb", "ccc"]8print([len(w) for w in words])
把積木打散,自己排回去:排回去:把剛才那支程式的積木排好
換你了
讀進一段英文,印出出現最多次的那個字。
⚠️ 裁判餵的是 the cat the dog the。
⚠️ 用得到:split()(這一課)、dict 的 get(第 9 課)、
max(第 8 課)。這一題把三課接起來了。
到編輯器做這一題:練習:出現最多次的那個字(三課接起來)
做一個
讀進一行英文,印出最長的那個單字和它的長度。
⚠️ 裁判用的是 a program is a projection。
🔴 如果有兩個一樣長呢? 這一題沒有規定,你自己決定要留第一個還是最後一個——而那個決定會出現在你寫的是 > 還是 >=。
到編輯器做這一題:做一個:最長的那個單字
這一課你做了什麼
- 你用了字串的幾個常用方法,並知道它們回傳新的
- 你用
split 把一句話拆成了一串字
- 你用推導式把一串變成了另一串
接下來
入門到這裡結束。你已經有了寫一支小程式需要的全部東西。
往下有兩條路:
- Python 銜接——如果你也想學 C++,那一軌講兩個語言的差別
- C++ 進階——排序、二分搜、圖、動態規劃
如果卡住了
| 你看到 |
多半是因為 |
s.upper() 之後 s 沒變 |
字串不可變。要 s = s.upper() |
split 拆出空字串 |
前後有空白。先 .strip() |
join 說型別錯 |
裡面要全是文字。數字要先 str(...) |
| 推導式看不懂 |
先拆成三行迴圈寫一次,再壓回去 |
在編輯器打開這一課 →