機
器
人
Python 中的字串
我們對於字串,都有一定的直覺瞭解—不論你有沒有在程式中使用字串的經驗。那是因為,「字串」的概念,已經深深地植入在我們的日常生活中。字串,顧名思義就是一串字。
在 Python 中,字串扮演著一個極度重要的角色,它是一種 Python 內建的資料型態,基乎上任何在引號 ""
的文字都可以稱作是一個字串。接下來,讓我們來探索一些 Python 中關於字串的特點吧!
什麼是字串?
我們都有寫過下面這種簡單的程式:
print("Hello World")
或者是:
name = input("Enter your name: ")
print("Hello, " + name)
而且我們都知道,這些文字一定要放在引號 ""
中。然而,我們卻鮮少去思考這些文字(字串)到底是什麼東西。字串是一種 Python 內建的資料型態,具有著強大的功能以及內建的函數可以使用。
我們可以隨心所欲地將字元加入字串中,在使用字串時,只需要將字串的內容用單引號 ''
或雙引號 ""
中即可。另外,引號的數量可以是 1 個,也可以是 3 個。讓我們建立變數試試看:
a = 'Hi.'
b = '''Hi.'''
c = "Hi."
d = """Hi."""
那麼,為什麼會有 1 個引號與 3 個引號的差別呢?其實這兩者之間沒有什麼差別,除了3 個引號的字串可以跨行:
e = """
This string spans
across two lines.
"""
跳脫字元
接著,讓我們試著用上面所學到的東西來建立一個字串。其內容為「He said, “It is good.”」,如果我們直接將整段文字包在雙引號中,像是這樣:
stringA = "He said, "It is good.""
則執行時,將會出現這樣的錯誤:
File "", line 1
stringA = "He said, "It is good.""
^
SyntaxError: invalid syntax
怎麼會發生這種事情呢?原來,電腦在瞭解程式時時,將程式中的第一個引號 "
視為字串的開始,並將第二個引號 "
視為字串的結束。因此,電腦在理解剛剛「He said, "…」字串時,將 "He said"
視為一個字串,也就使得後面的「It」變成一個錯誤。
那麼,如果我們真的很想要在字串中使用引號「"」怎麼辦?此時,跳脫字元(escape character)就成了一個相當方便的工具了。我們只要在字串中的引號前面,加上一個反斜線 \
就可以了。這個反斜線 \
的存在,就像在告訴電腦:「不管後面加上什麼東西,都不要理它。」
stringA = "He said, \"It is good.\""
print(stringA)
這麼一來,就不會有錯誤發生,我們也可以成功地 print()
出想要的字串(下列為輸出結果):
He said, "It is good."
仔細看看後你會發現,Python 在 print()
時甚至幫我們省略了反斜線!另外,字串的實際長度也不會因為那兩個反斜線而變長,跳脫字元可說是相當地方便!
+ 運算符號
就像數字的加減乘除,以及布林值的 and
與 or
之外,字串也是擁有自己的運算符號的!Python 中,字串的運算符號都相當地直覺,例如加號 +
的作用,就是將兩個字串相連:
greet = "Hello, "
name = "Kyle"
output = greet + name
print(output)
這段程式的第三行,可以清楚地看到我們用加號 +
將兩段字串連在一起。如果執行這段程式,我們可以看到這樣的結果:
Hello, Kyle
我們也可以使用 +=
這個運算符號:
string = "Hi, "
string += "Amy!"
print(string)
將會產生這樣的結果:
Hi, Amy!
* 運算符號
跟數字的運算一樣,在 Python 中,字串也有乘號 *
這個運算符號。我們都知道,在數字運算的時候, 3 * 3 = 9
是絕對成立的,但是如果是字串的乘法呢?
相信你也已經猜到了,字串的乘法就是將字串不斷重複的意思!讓我們看看下面這個例子:
say1 = "Hi. "
say3 = say1 * 3
print(say3)
執行之後我們可以得到這樣的結果:
Hi. Hi. Hi.
如果今天字串是一個變數,那我們也可以使用 *=
這樣的運算符號,像是:
string = "Hi! "
string *= 3
print(string)
將會輸出:
Hi! Hi! Hi!
in 運算符號
在 Python 中,還有一個相當方便的字串運算符號—in
。「in」這個英文字本身就帶有「在…中」的意思,顧名思義,用在字串上的時候,in
運算符號就代表「在…字串中」的意思。
這樣講起來似乎有些抽象,讓我們想想看接下來的這個例子:現在有一個字串變數,我們要確定這個字串中是否有英文字母 a,要怎麼做呢?這種時候,in
就是一個相當方便的工具了:
string = "Hi there"
print("a" in string)
上面這段程式,將會 print()
出:
False
看清楚發生什麼事情了嗎?讓我們來回顧一下:我們先是宣告了一個變數,並將其值設為字串「Hi there」。接著,我們印出 "a" in string
,而 in
的意思是「在…字串中」,在此,「a」並不存在於「Hi there」中,因此電腦印出 False 的結果。
讓我們再多用幾個例子來練習:
print("com" in "computer")
print("An" in "Dan")
print("No" in "No one is here.")
print("p" in "composition")
將會印出:
True
False
True
True
此處可以注意的是,第二行的 print("An" in "Dan")
印出了 False,由此可知,相同字母但是大小寫不同,是不會被 in
運算符號考慮成相等的。事實上,大寫和小寫字母對於電腦來說就是兩個完全不同的東西呢!
len()
當我們看到一個書上句子時,我們會想到它的那些特性呢?很顯然地,我們首先想到的就是這個句子的長度。現在,將我們書上會看到的句子想成是字串,在程式語言中,字串也是有長度的!
假設現在給你一個字串變數,像這樣:
test = "This is a sentence."
接著,我們要問你這個字串中有幾個字元,你要如何回答呢?當然,我們不可能要求電腦一個一個字母數出來給我們聽(其實應該可以),那麼究竟怎麼達到這個目的呢?
len()
這個東西,就是專門出現在這種時候的啦!使用 len()
,我們就可以不費一絲力氣地得到字串的長度:
print(len(test))
將會印出:
19
現在,讓我們來數數看,"This is a sentence."
中有幾個字元吧!請注意,引號 ""
並不是字串的一部分。是不是真的 19 個字元呢?這麼一來,我們若被要求得到一個字串的長度,就可以使用 len()
了!