Python/變量和字符串
本節介紹 Python 中兩種不同的數據類型——變量和字符串。請運行以下程序片段,並對照其輸出結果學習。如果你的 Python 版本和此處的代碼不符,可單擊「Python 2.x」或「Python 3.x」旁邊的「切換」來選擇不同版本。
變量
[編輯]變量是一個可能會發生改變的值。簡而言之,變量像一個盒子,可以往裡裝任何東西。現在我們只研究把數字放在裡面的情形,例如:
lucky = 7
print(lucky)
在這個程序中,我們把 lucky 賦值為7。然後,Python 在屏幕中列印出 lucky 的數值。
現在,我們來試著改變變量的值:
changing = 3
print(changing)
changing = 9
print(changing)
different = 12
print(different)
print(changing)
changing = 15
print(changing)
在這個程序中,我們定義一個變量changing
, 把它賦值為 3
,然後讓 Python 告訴我們changing
是多少。接著我們讓changing
把它賦值為9
,再問問 Python 現在changing
等於多少。 Python 把原來的3
丟掉,換成了9
,所以它告訴我們現在changing
等於9
。接下來,我們構造了第二個變量,將其命名為different
,並給它賦值12
。接下來問 Python different
和changing
各是多少,它告訴我們分別是12
和9
。因此,一個變量改變時任何其他的變量都不會受影響。變量改變時,它會丟棄原先的值而留下新的值,例如接下來我們把changing
再次賦值為15
(原來是9
),那麼9
被丟棄了, Python 告訴我們現在changing
等於15
。
你也可以把另一變量的值賦給一個變量,例如:
red = 5
blue = 10
print(red, blue)
yellow = red
print(yellow, red, blue)
red = blue
print(yellow, red, blue)
這個程序稍微複雜了些。請記住,我們永遠把變量名寫在賦值號(=)左邊,值寫在賦值號右邊——先名後值。
首先我們令red
為5
,blue
為10
。第三行中我們用逗號分隔,一次性在屏幕上列印兩個變量,其間會用一個空格分隔。所以, Python 輸出了5 10
,也就是說red
等於5
,blue
等於10
。 現在,我們構造第三個變量yellow
,然後讓 yellow
的值等於 red
的值(再回憶一遍:變量名在左邊,值在右邊) 。Python 知道 red
等於 5
,所以它就讓 yellow
也等於 5
。最後我們讓 Python 告訴我們三個變量的值: yellow
為 5
、 red
為 5
、 blue
仍為 10
。
接著我們來把 red
設為 blue
的值。別弄混了——變量名在左邊,值在右邊。 Python 記得 blue
的值等於 10
,於是就把 red
原先的值(5
)丟棄,換成了 blue
的值。最後, Python 輸出三個變量的值: yellow
為 5
、 red
為 10
、 blue
為 10
。
但我們之前(代碼第5行)不是讓 yellow
等於 red
的值了嗎?事實上, red
變為 10
時 yellow
仍為 5
,這是因為 yellow
只是在我們讓它等於 red
時才關心後者的值。在這之後,它們就沒什麼關係了。 yellow
的值並不會影響 red
的值,反之亦然。
關於變量的內容,目前了解這些就足夠了,我們在之後還會回過頭來更深入地討論。一定要記住(這是第四遍了):當你給變量賦值時,把變量名寫在賦值號左邊,值寫在賦值號右邊。
字符串
[編輯]字符串就是一串按順序排列的字符。凡是你能用鍵盤在屏幕上打出來的都稱為字符,比如漢字、字母、數字、空格。例如,"hello
"就是一個字符串,它的長度是5—— h
、 e
、 l
、 l
、 o
。字符串里也可以有空格:"hello world
"包含11個字符,其中有一個是"hello
" 和 "world
"之間的空格。字符串的長度沒有上限——你可以構造只有一個字符的字符串,也可以構造長度為一百萬的字符串。字符串的長度也可以是0,我們叫它「空字符串」。
在 Python 中有三種方法構造一個字符串:單引號('
)、雙引號("
)、三個雙引號("""
),在字符串前後加上其中任何一個(但必須統一,例如不能前面用單引號後面用雙引號)即可。例如:
>>> print('I am a single quoted string')
I am a single quoted string
>>> print("I am a double quoted string")
I am a double quoted string
>>> print("""I am a triple quoted string""")
I am a triple quoted string
如果字符串中需要用到引號,你可以在它前面加上一個反斜槓(\),讓 Python 知道這不是字符串的末尾,而是一個普通的字符。我們把反斜槓稱為轉義符。如果字符串中需要用到反斜槓,也一樣把反斜槓轉義即可,即在它前面再加一個反斜槓:
>>> print("So I said, \"You don't know me! You'll never understand me!\"")
So I said, "You don't know me! You'll never understand me!"
>>> print('So I said, "You don\'t know me! You\'ll never understand me!"')
So I said, "You don't know me! You'll never understand me!"
>>> print("This will result in only three backslashes: \\ \\ \\")
This will result in only three backslashes: \ \ \
接著我們用簡單的程序做示範,來討論字符串的運算。
print("Hello, world!")
這不就是我們一開始寫的程序嗎?可見,當初我們其實已經用到了字符串。你可以把兩個字符串用 +
拼接起來:
>>> print("Hello, " + "world!")
Hello, world!
注意第一個字符串末尾有一個空格。如果你忘記加上它的話,兩個字符串就會緊挨在一起,得到 Hello,world!
你也可以用 *
來複製字符串若干次,如:
>>> print("bouncy, " * 10)
bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy,
如果你想知道字符串的長度是多少,可以用 len()
函數(len
是英文length的縮寫),它接收一個字符串做參數,返回字符串的長度。把字符串放在括號中即可:
>>> print(len("Hello, world!"))
13
字符串和變量
[編輯]現在我們學習了字符串和變量兩個概念,接下來把它們綜合起來。
變量不僅能儲存數字,還可以儲存字符串:
question = "What did you have for lunch?"
print(question)
這個程序中,我們構造了一個變量 question
,並令它等於字符串 "What did you have for lunch?
" 。接著,我們讓 Python 列印變量 question
的值。注意,這裡 question
兩端沒有引號,這表示我們引用的是變量而不是字符串。假如在 question
兩端加上雙引號,Python就會把它當成字符串並輸出 question
,而不是 What did you have for lunch?
。
接著試試別的。現在我們問了用戶問題,卻不能讓用戶回答。所以我們改改程序,讓用戶可以輸入他中午吃了什麼:
Python 3.xPython 2.x - 切換
question = "What did you have for lunch?"
print(question)
answer = input()
print("You had " + answer + "! That sounds delicious!")
為了使用戶能夠輸入字符串,我們在 Python 2.x 下調用了 raw_input()
函數,在 Python 3.x 下則是 input()
函數;該函數能接受用戶輸入,等用戶按下回車時便返回輸入的字符串。別忘了在函數名最後加上一對括號!雖然括號內什麼也沒有,但這對括號必須要加,否則 Python 會告訴你代碼出錯了。Python 2.x 下也有 input()
函數,它與 raw_input()
函數有一些區別,我們以後會討論。Python 3.x 則把兩個函數統一成了 input()
。
在這個程序中,我們建立了變量 answer
,並把用戶輸入的字符串放入其中。接下來,我們輸出一個新字符串,由字符串"You had
" 開頭,接著是 answer
(其中為用戶輸入的內容),最後是字符串"! That sounds delicious!
"。如上文所述,用加號+
把字符串連接起來。
連接數字與字符串
[編輯]看看以下程序,你能猜出它是幹什麼的嗎?
Python 3.xPython 2.x - 切換
print("Please give me a number: ")
number = input()
plusTen = number + 10
print("If we add 10 to your number, we get " + plusTen)
嗯,也許你會說這個程序讓用戶輸入一個數字,然後把它加上10,並輸出結果。那麼試著運行一下吧——沒想到它竟然報錯了!輸入數字後,你應該會看到以下錯誤信息(test.py為程序的文件名,可能與你看到的不相同):
Python 3.xPython 2.x - 切換
Traceback (most recent call last):
File "test.py", line 4, in <module>
plusTen = number + 10
TypeError: must be str, not int
為什麼?Python 告訴我們這是一個 TypeError
(類型錯誤)。具體來說,Python 不知道怎麼把兩個不同類型(字符串和數字)的變量拼接起來。在這裡, Python 認為 number
變量存儲的是一個字符串而不是數字。例如用戶輸入 15
以後, number
等於一個長度為2的字符串:第一位是 1
,第二位是 5
。那麼我們怎麼告訴 Python 在這裡 15
應該是數字而非字符串呢?
答案很簡單,我們有兩個函數可以轉換字符串和數字。 int()
函數接收一個字符串,把它轉換為數字; str()
函數接收一個數字,把它轉換為字符串。想調用這兩個函數時,我們只要把參數用括號括起來即可。那麼像這樣修改程序:
Python 3.xPython 2.x - 切換
print("Please give me a number: ")
response = input()
number = int(response)
plusTen = number + 10
print("If we add 10 to your number, we get " + str(plusTen))
本節內容到此為止。我們在之後的課程會系統地討論 Python 的各種類型。
函數回顧
[編輯]input()
或raw_input()
:等待用戶輸入,返回用戶輸入字符串。len()
:返回輸入字符串的長度(字符的個數)str()
:將輸入變量轉為字符串int()
:將輸入變量轉為數字
習題
[編輯]- 寫一個程序,讓用戶輸入一個字符串,並在屏幕上列印該字符串的長度。
- 寫一個程序,讓用戶輸入一個字符串s和一個數字n。在屏幕上列印n次字符串s。(例如輸入的字符串是
hello
,數字是3
,則應輸出hellohellohello
。) - 如果程序讓用戶輸入一個數字,用戶卻輸入了字符串,會發生什麼事?寫個程序嘗試一下。用你現在所學的知識,能否解釋為什麼會發生這些事?