字串 String
字串就是一段文字。前面已經一直在用它,這一章專門看字串能做哪些事:拆開、拼接、搜尋,以及把它排得整整齊齊。
字串就像一排字元
Section titled “字串就像一排字元”字串裡的每個字都有索引,可以像串列一樣用索引和切片來取。len() 算的是有幾個字:
word = "Python"
print(word[0])print(word[-1])print(word[0:3])print(len(word))切片一樣可以用第三個數字當間隔。[::-1] 就是把字串反過來,是很常見的小技巧:
word = "Python"
print(word[::-1])常用的字串方法
Section titled “常用的字串方法”字串內建很多好用的方法,這裡是幾個最常見的:
text = " Hello, World "
print(text.upper())print(text.strip())print(text.replace("World", "Python"))upper()/lower():全部轉大寫/小寫。strip():去掉頭尾的空白。replace(舊, 新):把字串裡的某段換成別的。
這幾個方法有個共通點:都是回傳一個新的字串,原本的字串不會被改到(字串和元組一樣,建立後不能直接修改)。
拆開與拼接:split 與 join
Section titled “拆開與拼接:split 與 join”split() 依你指定的符號把字串切成一個串列;join() 相反,把串列裡的字串用某個符號串成一整段:
sentence = "蘋果,香蕉,橘子"
fruits = sentence.split(",")print(fruits)
joined = "、".join(fruits)print(joined)處理一行用逗號隔開的資料時,這兩個方法幾乎天天用到。
想知道某段文字在不在、在哪裡、出現幾次:
print("@" in email)print(email.find("@"))print(email.count("e"))x in 字串:檢查有沒有,回傳True或False。find(x):回傳第一次出現的索引(找不到會回傳-1)。count(x):數出現幾次。
檢查字串的內容
Section titled “檢查字串的內容”有一組方法用來檢查字串「是不是某種樣子」,回傳 True 或 False,常用在檢查使用者輸入(例如密碼、帳號):
print("abc123".isalnum())print("12345".isdigit())print("Hello".isupper())print("HELLO".isupper())print("hello world".title())isdigit():是不是全部都是數字。isalnum():是不是全部都是文字或數字(沒有符號、空白)。isupper()/islower():是不是全大寫/全小寫。title():把每個單字的字首轉大寫。
rjust() 把字串靠右、補到指定寬度,第二個參數是拿什麼來補(預設是空白)。zfill() 則專門在左邊補 0,常用來排數字:
print("7".rjust(3))print("7".rjust(3, "0"))print("42".zfill(5))字元與編碼:ord 與 chr
Section titled “字元與編碼:ord 與 chr”每個字元在電腦裡都對應一個數字編號。ord() 把字元轉成它的編號,chr() 反過來把編號轉回字元。例如大寫 A 是 65:
print(ord("A"))print(chr(65))print(chr(ord("a") + 1))chr(ord("a") + 1) 先拿到 a 的編號、加 1、再轉回字元,就得到 b。處理「下一個字母」這類問題時會用到。
格式化:f-string 的進階用法
Section titled “格式化:f-string 的進階用法”前面用過 f-string 把變數塞進字串。在大括號裡,變數後面加冒號還能指定格式,最常用的是控制小數位數:
price = 1234.5678
print(f"{price:.2f}")print(f"{price:,.2f}"):.2f 是「保留兩位小數」,:,.2f 再加上千分位逗號,很適合印金額。
對齊:<、>、^
Section titled “對齊:<、>、^”在冒號後面指定寬度和方向,可以把文字對齊,排出整齊的欄位:
for name in ["Ann", "Bob", "Cathy"]: print(f"|{name:<8}|{name:>8}|{name:^8}|")< 靠左、> 靠右、^ 置中,數字是欄位的寬度。(這裡用英文示範,因為寬度算的是「字數」,而中文字比英文寬,中英混排時對齊會有點跑掉。)
舊式的格式化:% 與 .format()
Section titled “舊式的格式化:% 與 .format()”你在別人的程式裡可能會看到另外兩種比較舊的格式化寫法,% 和 .format():
name = "小明"age = 18
print("%s 今年 %d 歲" % (name, age))print("{} 今年 {} 歲".format(name, age))三種寫法做的事一樣。知道它們長什麼樣就好,自己寫的時候,用 f-string 通常最直覺、最好讀。