HOWTO · Python
如何在 Python 中使用 if 判斷字串
了解如何在 Python 中使用 if 判斷字串內容、檢查子字串或允許的輸入,以及依需求進行不區分大小寫的比對。
本頁內容
在 Python 中,使用 if 搭配 == 比較字串內容,搭配 in 檢查子字串或允許的輸入;若比較時不需區分英文字母大小寫,可以先呼叫 lower() 等方法。請依照實際需求選擇條件:字串比較預設會區分大小寫,而 is 比較的是物件身分,不是文字內容是否相等。
基本字串比較
兩個字串應包含相同文字時使用 ==,應包含不同文字時使用 !=。比較運算式兩側的名稱都必須先定義,條件才能執行。若想進一步了解,請參閱Python 字串比較。
以下範例會檢查姓名是否相符:
name = "Alice"
if name == "Alice":
print("Hello, Alice!")
else:
print("You're not Alice.")
Python 比較字串時會區分大小寫,因此 "Alice" == "alice" 的結果是 false。如果要比較的是長度而非內容,也可以使用 len():
word1 = "Python"
word2 = "Programming"
if len(word1) < len(word2):
print(f"{word1} is shorter than {word2}")
else:
print(f"{word1} is not shorter than {word2}")
<、>、<= 和 >= 會依 Unicode 碼位以字典序比較字串;這些運算子不會判斷詞義,也不保證符合所有語言的字母排序規則。若要排序並呈現給使用者,請採用適合該語言與地區設定的排序方式。
使用 in 關鍵字檢查字串
用於字串時,in 會檢查左側文字是否出現在右側字串中,也就是檢查子字串。這項檢查會區分大小寫,而且不要求符合的文字必須是獨立單字:
sentence = "Python is awesome"
if "awesome" in sentence:
print("The sentence contains 'awesome'")
若要檢查輸入是否與數個允許的字串之一完全相同,請使用集合。以下範例會先將使用者的回覆轉成小寫,再檢查它是否在清單中:
user_input = "y"
if user_input.lower() in ["y", "yes", "yeah"]:
print("User agreed")
else:
print("User did not agree")
如需了解子字串檢查及相關寫法,請參閱Python 檢查字串是否包含另一個字串。若要尋找字串中重複出現的內容,請參閱找出字串中所有字元出現位置。
不區分大小寫的字串比較
若比較時不應受大小寫影響,請先將兩側文字正規化。簡單比對時常用 lower();若要對 Unicode 文字進行更完整的不區分大小寫比對,則可使用 casefold()。正規化會改變比較方式,因此只有在需求確實是不區分大小寫時才使用。
user_input = "YES"
if user_input.lower() == "yes":
print("Affirmative response received")
同樣的方式也能用於集合成員檢查:
color = "RED"
if color.lower() in ["red", "blue", "green"]:
print("Color accepted")
else:
print("Color not accepted")
可使用 lower() 或 upper() 進行一般的大小寫轉換。更多範例請參閱在 Python 中將字串轉成小寫或大寫。
進階字串比較
判斷易位詞(anagram)
將字元排序後,可以簡單檢查兩個字串是否包含數量相同的字元:
word1 = "listen"
word2 = "silent"
if sorted(word1) == sorted(word2):
print("The words are anagrams")
這種做法會把大寫與小寫視為不同字元,也會將空格和標點符號納入比較。如果不想比較這些字元,請先正規化字串或篩除它們。
使用字串方法
startswith() 和 endswith() 等方法可直接表達前綴與後綴檢查:
filename = "document.txt"
if filename.endswith(".txt"):
print("Text file detected")
組合多個條件
可用 and、or 和 not 組合條件。使用 and 時,每個子條件都必須成立,整體條件才會成立:
name = "John Doe"
if name.startswith("John") and " " in name:
print("Name matches the expected format")
這只是簡單的文字檢查,無法驗證所有可能的姓名格式。
比較物件身分
is 會檢查兩個名稱是否指向同一個物件。若要比較字串內容,請使用 ==;物件身分並不能可靠地用來判斷文字是否相等。
first = "Python"
second = "Python"
if first == second:
print("The strings have equal contents")
結論
比較字串內容時使用 == 或 !=;檢查子字串或集合成員時使用 in;需要忽略大小寫時再進行正規化。前綴和後綴檢查可使用字串方法。比較文字是否相等請用 ==;is 判斷的是另一件事:物件身分。
常見問題
Python 的字串比較會區分大小寫嗎?
會。預設情況下,"Python" 和 "python" 是不同的字串。若比較時要忽略大小寫,請先正規化兩個值。
if 語句可以檢查多個字串條件嗎?
可以。用 and 或 or 連接條件;若加上括號能讓條件分組更清楚,也可以使用括號。
== 和 is 有什麼差別?
== 比較值;is 檢查兩個參照是否指向同一個物件。比較字串內容時請使用 ==。
如何檢查字串是否以特定文字開頭或結尾?
呼叫 startswith() 或 endswith(),例如 filename.endswith(".txt")。
可以在 if 條件中使用正規表示式嗎?
可以。當比對規則需要模式時,可在條件中呼叫 Python re 模組的函式,例如 re.search(pattern, text)。若只需檢查簡單的子字串,使用 in 通常更直接。