課時3:小插曲之變數和字串

那是個好男孩發表於2018-07-19

目錄:

一、變數

二、字串

  >原始字串

  >長字串

三、課時03課後習題及答案

 

***********

一、變數

***********

  變數名就像我們現實社會的名字,把一個值賦值給一個名字時,Ta會儲存在記憶體中,稱之為變數(variable),在大多數語言中,都把這種行為稱為“給變數賦值”或“把值儲存在變數中”。

不過Python與大多數其他計算機語言的做法稍有不同,Ta並不是把值儲存在變數中,而更像是把名字貼在值的上邊。所以有些Python程式設計師會說“Python”沒有“變數”,只有“名字”。

看個例子:

>>> teacher = "小甲魚"
>>> print(teacher)
小甲魚
>>> teacher = "老甲魚"
>>> print (teacher)
老甲魚

 變數為什麼不叫”恆量“而叫變數?正因為它是可變的!再看另外一個例子:

>>> x = 3
>>> x = 5
>>> y = 8
>>> z = x + y
>>> print(z)
13

 同樣的方法也可以應用到字串中:

>>> myteacher = "小甲魚"
>>> yourteacher = "老甲魚"
>>> ourteacher = myteacher + yourteacher
>>> print(ourteacher)
小甲魚老甲魚

 這種字串加字串的語法,在Python裡稱為字串的拼接

 這裡進行了一番想法的測試,想看看變數的值變過後,其相應的id地址是否發生了變化:

 

>>> y = 1
>>> print(y)
1
>>> id(y)
140728562340896
>>> y = 2
>>> print(y)
2
>>> id(y)
140728562340928

 

經實驗證明,同一變數的值發生變化過後,其id地址也發生了變化。

 

 

需要注意的地方:

>在使用變數之前,需要對其先賦值。
>變數名可以包括字母、數字、下劃線,但變數名不能以數字開頭
>字母可以是大寫或小寫,但大小寫是不同的。也就是說fishc和FishC對於Python來說是完全不同的兩個名字
>等號(=)是賦值的意思,左邊是名字,右邊是值,不可寫反咯。

 

*************

二、字串

*************

到目前為止,我們所認知的字串就是引號內的一切東西,我們也把字串叫做文字,文字和數字是截然不同的,我們看例子:

>>> 5+8
13
>>> "5"+"8" #字串的拼接
'58'
>>> '5'+'8'
'58'
>>> 'Python I love you!"
SyntaxError: EOL while scanning string literal

要告訴Python你在建立一個字串,就要在字元兩邊加上引號,可以是單引號或者雙引號,Python女士表示不挑剔。必須成對,你不能一邊單引號,另一邊卻花心的用上雙引號結尾。

如果字串中需要出現單引號或雙引號怎麼辦?
例如我想列印字串:Let’s go!

有兩種方法,第一種比較常用,就是使用我們的轉義符號(\)對字串中的引號進行轉義。

還有一種就是利用Python既可以用單引號也可以用雙引號來表示字串這一特點,用上不同的引號表示字串。

>>> 'Let\'t go'
"Let't go"
>>> print('Let\'t go')
Let't go
>>> "Let't go"
"Let't go"
>>> print("Let't go")
Let't go

 

因為\now中的\n是被print識別成了轉移符號——回車。
然而直接顯示字串轉義符號不會被解釋,
所以就會這樣。

原始字串:

好像反斜槓是一個好東西,但不妨試試列印:

>>> str = 'C:\now'
>>> str
'C:\now'
>>> print(str)
C:
ow

我們可以用反斜槓對自身進行轉義:

>>> str = 'C:\\now'
>>> str
'C:\\now'
>>> print(str)
C:\now

但如果對於一個字串中有很多個反斜槓:
原始字串的使用非常簡單,只需要在字串前邊加一個英文字母r即可:

>>> str = r"C:\Program Files\Intel\WiFi\Help"
>>> str
'C:\\Program Files\\Intel\\WiFi\\Help'
>>> print(str)
C:\Program Files\Intel\WiFi\Help

在使用字串的時候需要注意一點是:無論是否原始字串,都不能以反斜槓作為結尾。如果你堅持這樣會報錯。

>>> string = 'FishC\'
SyntaxError: EOL while scanning string literal

 

長字串:

如果希望得到一個跨越多行的字串,例如:
我愛魚C,
正如我愛小甲魚,
他那呱唧呱唧
呱唧呱唧
呱唧呱唧的聲音,
總纏繞於我的腦海,
久久不肯散去……
這我們就需要使用到三重引號字串

>>> print("""
我愛魚C,
正如我愛小甲魚,
他那呱唧呱唧
呱唧呱唧
呱唧呱唧的聲音,
總纏繞於我的腦海,
久久不肯散去……
""")

我愛魚C,
正如我愛小甲魚,
他那呱唧呱唧
呱唧呱唧
呱唧呱唧的聲音,
總纏繞於我的腦海,
久久不肯散去……

 

*******************************

三、課時03課後習題及答案

*******************************

 測試題:

0. 以下哪個變數的命名不正確?為什麼?
    (A) MM_520  (B) _MM520_  (C) 520_MM  (D) _520_MM

1. 在不上機的情況下,以下程式碼你能猜到螢幕會列印什麼內容嗎?

1 >>>myteacher = '小甲魚'
2 >>>yourteacher = myteacher
3 >>>yourteacher = '黑夜'
4 >>>print(myteacher)

解釋一下,這幾行程式碼:首先,想象一下有一個叫做“小甲魚“資料,程式碼myteacher = '小甲魚'實現了將變數myteacher指向了這一個資料,進而存入了記憶體中,也就是為”小甲魚“貼上了myteacher的標籤;程式碼yourteacher = myteacher,將變數yourteacher也指向了這一個資料,這時候有兩個變數指向同一資料;第三行程式碼,(我們說python並不是把值儲存在變數中,而更像是將名字貼在值上面)所以,變數yourteacher變卦了,指向了”黑夜“這一資料,而myteacher還是指向小甲魚這一資料。我們可看看它們id地址的變換情況。

 

>>> myteacher = "小甲魚"
>>> id(myteacher)
3249577405872
>>> yourteacher = myteacher
>>> id(yourteacher)
3249577405872
>>> yourteacher = "黑夜"
>>> id(yourteacher)
3249577880632
>>> id(myteacher)
3249577405872

 

2. 在不上機的情況下,以下程式碼你能猜到螢幕會列印什麼內容嗎?

1 >>> myteacher = '小甲魚'
2 >>> yourteacher = myteacher
3 >>> myteacher = '黑夜'
4 >>> print(yourteacher)

3. 在不上機的情況下,以下程式碼你能猜到螢幕會列印什麼內容嗎?

1 >>>first = 520
2 >>>second = '520'
3 >>>first = second
4 >>>print(first)

4. 如果非要在原始字串結尾輸入反斜槓,可以如何靈活處理?

5. 在這一講中,我們說變數的命名需要注意一些地方,但小甲魚在舉例的時候貌似卻幹了點兒“失誤”的事兒,你能看得出小甲魚例子中哪裡有問題嗎?

 動動手:

0. 還記得我們第一講的動動手的題目嗎?這一次要求使用變數,計算一年有多少秒?
提示:可以以 DaysPerYear(每年天數),HoursPerDay(每天小時數),MinutesPerHour(每小時分鐘數),SecondsPerMinute(每分鐘秒數)為變數名。
1. 關於最後提到的長字串(三重引號字串)其實在 Python3 還可以這麼寫,不妨試試,然後比較下哪種更方便?

1 >>> string = (
2 "我愛魚C,\n"
3 "正如我愛小甲魚,\n"
4 "他那呱唧呱唧的聲音,\n"
5 "總纏繞於我的腦海,\n"
6 "久久不肯散去……\n")

 

答案:

 

測試題答案:

 

0. 以下哪個變數的命名不正確?為什麼? (A) MM_520 (B) _MM520_ (C) 520_MM (D) _520_MM

(C)選項不正確,因為 Python 中的變數名不能以數字開頭。

1. 在不上機的情況下,以下程式碼你能猜到螢幕會列印什麼內容嗎?

會列印:小甲魚

2. 在不上機的情況下,以下程式碼你能猜到螢幕會列印什麼內容嗎?

會列印:小甲魚

3. 在不上機的情況下,以下程式碼你能猜到螢幕會列印什麼內容嗎?

會列印:520,注:這裡沒有單引號括起來,但是他是一個字串,因為使用 print() 列印,所以不包含單引號。可以試試直接>>>first,它是一個字串的。

4. 如果非要在原始字串結尾輸入反斜槓,可以如何靈活處理?
>>> str = r'C:\Program Files\FishC\Good''\\'
>>> str
'C:\\Program Files\\FishC\\Good\\'
>>> print(str)
C:\Program Files\FishC\Good\

6. 在這一講中,我們說變數的命名需要注意一些地方,但小甲魚在舉例的時候貌似卻幹了點兒“失誤”的事兒,你能看得出小甲魚例子中哪裡有問題嗎?

  在例子中小甲魚起了個 str 名字的變數,但事實上我們發現,str 的顏色跟普通變數貌似不同?沒錯,str() 和 print() 都是內建函式,但 Python 貌似不介意我們對內建函式進行賦值操作,所以這點我們以後就要注意啦.

 

動動手答案:

 

0. 還記得我們第一講的動動手的題目嗎?這一次要求使用變數,計算一年有多少秒?
1 >>> DaysPerYear = 365
2 >>> HoursPerDay = 24
3 >>> MinutesPerHour = 60
4 >>> SecondsPerMinute = 60
5 >>> result = DaysPerYear * HoursPerDay * MinutesPerHour * SecondsPerMinute
6 >>> result
7 31536000
8 >>> print(result)
9 31536000

小甲魚備註:大家看到了要給變數起一個合適的名字並不容易,但在很多文件中,這類名字隨處可見,所以要習慣。

相關文章