跳轉至內容

Python 程式設計/變數和字串

來自華夏公益教科書


在本節中,您將被介紹兩種不同的 Python 資料型別:變數和字串。請透過執行包含的程式並檢查其輸出,跟著學習。

變數是儲存可能變化的值的東西。簡單來說,變數就像一個盒子,你可以把東西放進去。你可以使用變數來儲存各種東西,但現在,我們只關注將數字儲存在變數中。

lucky = 7
print (lucky)
7

這段程式碼建立了一個名為lucky的變數,並將整數7分配給它。當我們要求 Python 告訴我們變數lucky中儲存了什麼時,它會再次返回該數字。

我們也可以更改變數內部的內容。例如

 

changing = 3                                   
print (changing)
3 

changing = 9
print (changing)
9

different = 12
print (different)
12
print (changing)
9

changing = 15
print (changing)
15

我們宣告一個名為changing的變數,在其中放入整數3,並驗證分配是否正確完成。然後,我們將整數9分配給changing,並再次詢問changing中儲存了什麼。Python 已經丟棄了3,並用9替換了它。接下來,我們建立一個第二個變數,我們稱之為different,並將12放入其中。現在我們有兩個獨立的變數,differentchanging,它們儲存著不同的資訊,即,為其中一個分配新值不會影響另一個。

您還可以將一個變數的值設定為另一個變數的值。例如

red = 5
blue = 10
print (red, blue)
5 10

yellow = red
print (yellow, red, blue)
5 5 10

red = blue
print (yellow, red, blue)
5 10 10

要理解這段程式碼,請記住,變數的名稱始終位於等號(賦值運算子)的左側,而變數的位於等號的右側。先寫名稱,後寫值。

我們首先宣告red5blue10。如您所見,您可以向print傳遞多個引數,告訴它在一行上列印多個專案,並用空格分隔它們。正如預期的那樣,Python 報告red儲存5blue儲存10

現在我們建立一個第三個變數,叫做yellow。為了設定它的值,我們告訴 Python 我們希望yellowred的值。(記住:名稱在左邊,值在右邊。)Python 知道red5,所以它也設定yellow5

現在我們將red變數設定為blue變數的值。不要混淆——名稱在左邊,值在右邊。Python 查詢blue的值,發現它是10。因此,Python 丟棄了red的舊值(5),並用10替換了它。在這次賦值之後,Python 報告yellow5red10blue10

但是我們不是說yellow應該是red的值嗎?yellow仍然是5red10的原因是,我們只說yellow應該是red賦值那一刻的值。在 Python 弄清楚red是什麼並將該值分配給yellow之後,yellow就不再關心red了。yellow現在有一個值,並且該值將保持不變,無論red發生什麼。

注意
Python 中不同變數之間的互動,實際上比這裡解釋的要複雜。上面的例子適用於整數和 Python 中內建的所有其他基本資料型別;列表字典(您將在稍後遇到這些複雜的資料型別)的行為完全不同,但。您可以閱讀關於資料型別的章節,以更詳細地瞭解 Python 中的變數是什麼以及它們的型別如何影響它們的行為。但是,現在您只要記住這一點就足夠了:無論何時您宣告變數或更改其值,始終將變數的名稱寫在等號(賦值運算子)的左側,將您要分配給它的寫在右側。

對於變數的名稱,它只能包含大寫和小寫字母(A-Z、a-z)、數字(0-9)和下劃線字元(_),並且名稱的第一個字元不能是數字。例如,1abc_#$ad不是有效的變數名,而_123a__bc是有效的變數名。

'字串'僅僅是一個按順序排列的字元列表。一個字元是您可以在鍵盤上一次按鍵輸入的任何東西,例如字母、數字或反斜槓。例如,“hello”是一個字串。它有五個字元長——hello。字串也可以包含空格:“hello world”包含 11 個字元:10 個字母和“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 ("""The double quotation mark (\") is used to indicate direct quotations.""")
The double quotation mark (") is used to indicate direct quotations.

如果您想在字串中包含反斜槓,則必須對該反斜槓進行轉義。這告訴 Python 您想要將反斜槓包含在字串中,而不是將其用作跳脫字元。例如

>>> print ("This will result in only three backslashes: \\ \\ \\")
This will result in only three backslashes: \ \ \

如您從上面的例子中看到的,只有用於引用字串的特定字元需要轉義。這使得程式碼更易讀。

要了解如何使用字串,讓我們回顧一下一個熟悉的程式

>>> print("Hello, world!")
Hello, world!

看看!從一開始您就在使用字串了!

您可以使用+運算子將兩個字串加在一起:這稱為連線它們。

>>> print ("Hello, " + "world!")
Hello, world!

請注意,第一個字串的末尾有一個空格。如果您不加進去,這兩個詞就會連在一起,最終會得到Hello,world!

您還可以使用*運算子重複字串,如下所示

>>> print ("bouncy " * 5)
bouncy bouncy bouncy bouncy bouncy 
>>> print ("bouncy " * 10)
bouncy bouncy bouncy bouncy bouncy bouncy bouncy bouncy bouncy bouncy

字串bouncy在第一個例子中被重複了 5 次,在第二個例子中被重複了 10 次。

如果您想找出字串的長度,可以使用len()函式,它只接受一個字串並計算其中的字元數。(len代表“長度”。)只需將要查詢長度的字串放在函式的括號內即可。例如

>>> print (len("Hello, world!"))
13

字串和變數

[編輯 | 編輯原始碼]

現在您已經瞭解了變數和字串,讓我們看看它們如何協同工作。

變數可以儲存的不僅僅是數字。您也可以使用它們來儲存字串!以下是方法

question = "What did you have for lunch?"
print (question)
What did you have for lunch?

在這個程式中,我們建立了一個名為question的變數,並將字串“What did you have for lunch?”儲存在其中。然後,我們只是告訴 Python 打印出question變數中的內容。請注意,當我們告訴 Python 打印出question時,question周圍沒有引號:這告訴 Python 我們正在使用一個變數,而不是一個字串。如果我們在question周圍加上引號,Python 會將其視為一個字串,如下所示

question = "What did you have for lunch?"
print ("question")
question

讓我們嘗試一些不同的東西。當然,詢問使用者午餐吃了什麼很好,但如果他們不能回應,就沒有多大區別!讓我們編輯這個程式,以便使用者可以輸入他們吃的東西。

question = "What did you have for lunch?"
print (question)
answer = raw_input() #You should use "input()" in python 3.x, because python 3.x doesn't have a function named "raw_input".

print ("You had " + answer + "! That sounds delicious!")

為了要求使用者寫下一些東西,我們使用了名為raw_input()的函式,它會一直等待使用者寫下內容並按下回車鍵,然後返回使用者寫下的內容。不要忘記括號!即使括號裡面沒有內容,它們也很重要,如果省略括號,Python 會報錯。您還可以使用另一個名為input()的函式,它的工作方式幾乎相同。我們將在後面學習這兩個函式之間的區別。

注意
在 Python 3.x 中,raw_input() 被重新命名為 input()。也就是說,新的 input() 函式從 sys.stdin 中讀取一行,並返回它,不包括尾隨換行符。如果輸入過早終止(例如,按 Ctrl+D),它將引發 EOFError。要獲得 input() 的舊行為,請使用 eval(input())

在這個程式中,我們建立了一個名為 answer 的變數,並將使用者輸入的任何內容放入其中。然後,我們打印出一個新字串,其中包含使用者輸入的任何內容。注意 "You had " 字串末尾的空格,以及 "! That sounds delicious!" 字串開頭的感嘆號。它們有助於格式化輸出並使其看起來美觀,這樣字串就不會全部連在一起。

組合數字和字串

[編輯 | 編輯原始碼]

看看這個程式,看看你是否能弄清楚它應該做什麼。

print ("Please give me a number: ")
number = raw_input()

plusTen = number + 10
print ("If we add 10 to your number, we get " + plusTen)

這個程式應該從使用者那裡獲取一個數字,加上 10,然後打印出結果。但是,如果你嘗試執行它,它將無法正常工作!你將得到一個類似於此的錯誤

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print "If we add 10 to your number, we get " + plusTen
TypeError: cannot concatenate 'str' and 'int' objects

這裡發生了什麼?Python 告訴我們有一個 TypeError,這意味著資訊型別使用有問題。具體來說,Python 無法弄清楚如何協調同時使用的兩種資料型別:整數和字串。例如,Python 認為 number 變數儲存的是一個字串,而不是一個數字。如果使用者輸入 15,那麼 number 將包含一個包含兩個字元的字串:一個 1,後面跟著一個 5。那麼我們如何告訴 Python 15 應該是一個數字,而不是一個字串呢?

此外,在列印答案時,我們告訴 Python 將一個字串 ("If we add 10 to your number, we get ") 和一個數字 (plusTen) 連線在一起。Python 不知道如何做到這一點——它只能將字串連線在一起。我們如何告訴 Python 將一個數字視為一個字串,以便我們可以將其與另一個字串一起打印出來?

幸運的是,有兩個函式是這些問題的完美解決方案。int() 函式將接受一個字串並將其轉換為整數,而 str() 函式將接受一個整數並將其轉換為字串。在這兩種情況下,我們都將要更改的內容放在括號中。因此,我們修改後的程式將如下所示

print ("Please give me a number:",)
response = raw_input()

number = int(response) 
plusTen = number + 10

print ("If we add 10 to your number, we get " + str(plusTen))

注意
另一種完成相同操作的方法是在字串部分之後新增一個逗號,然後是數字變數,如下所示

print ("If we add 10 to your number, we get ", plusTen)

或者使用特殊的列印格式,如下所示

print ("If we add 10 to your number, we get %s" % plusTen)

如果有多個輸入,則可以這樣寫

plusTwenty = number + 20
print ("If we add 10 and 20 to your number, we get %s and %s" % (plusTen, plusTwenty))

或者使用 format()

print ("If we add 10 to your number, we get {0}".format(plusTen))

關於字串和變數,你只需要知道這些!我們將在後面學習更多關於型別的知識。

學習過的函式列表

[編輯 | 編輯原始碼]
  • print():將輸出資訊列印給使用者
  • input()raw_input():向用戶詢問響應,並返回該響應。(請注意,在版本 3.x 中,raw_input() 不存在,已被 input() 取代)
  • len():返回字串的長度(字元數)
  • str():返回物件的字串表示
  • int():給定一個字串或數字,返回一個整數

注意

  1. inputraw_input 函式接受字串作為引數。這個字串將在等待使用者輸入時顯示在提示符中。
  2. 兩者之間的區別在於,raw_input 將來自輸入裝置的資料作為原始字串接受,而 input 接受資料並將其評估為 Python 程式碼。這就是為什麼使用 input 作為獲取使用者字串值的方法會返回錯誤,因為使用者需要輸入帶引號的字串。

建議始終使用 raw_input,並使用 int 函式將原始字串轉換為整數。這樣,我們就不必在錯誤處理章節之前處理錯誤訊息,並且不會在程式碼中造成安全漏洞。

  1. 編寫一個程式,要求使用者輸入一個字串,然後告訴使用者該字串的長度。
  2. 向用戶詢問一個字串,然後詢問一個數字。打印出該字串,列印該數字次數。(例如,如果字串是 hello 並且數字是 3,那麼你應該打印出 hello hello hello 。)
  3. 如果一個惡作劇的使用者在詢問數字時輸入了一個單詞,會發生什麼?試試看。

解決方案

測驗

華夏公益教科書