申明: 本站飛宇網 https://feiyetopro.blogspot.com/。自網路收集整理之書籍、文章、影音僅供預覽交流學習研究,其[書籍、文章、影音]情節內容, 評論屬其個人行為, 與本網站無關。版權歸原作者和出版社所有,請在下載 24 小時內刪除,不得用作商業用途;如果您喜歡其作品,請支持訂閱購買[正版]。謝謝!

第 4 章 資料的類型
我們已經看到,至少可以為一個變數賦 3 種不同類型的值(保存在電腦記憶體中):整數、浮點數和字串。Python 還有其他一些資料類型,後面將會學到,不過對現在來說,這 3 個類型就足夠了。這一章中,我們將學習怎樣區分一個值究竟是什麼類型。還會瞭解如何由一個類型建立另一個類型。
4.1 改變類型
很多情況下,我們需要將資料從一種類型轉換成另一種類型。例如,想要列印一個數位時,就需要把它轉換成文本,使它能夠出現在螢幕上。Python 的 print 命令可以為我們實現這點。不過,有時我們只是想轉換而不需要列印出來,或者需要從字串轉換成數位(這是 print 無法做到的)。這稱為類型轉換(type conversion)。這該如何做到呢?
Python 實際上並沒有把一個東西從一種類型“轉換”成另一種類型。它只是由原來的東西創建一個新東西,而且這個新東西正是你想要的類型。下面給出一些函數,它們可以把資料從一種類型轉換為另一種類型。
·
float() 從一個字串或整數創建一個新的浮點數(小數)。
·
int() 從一個字串或浮點數創建一個新的整數。
·
str() 從一個數(可以是任何其他類型)創建一個新的字串。
float()、int() 和 str() 後面有小括弧,因為它們不是 Python 關鍵字(如 print)——它們只是 Python 的內置函數(function)。
後面我們還會學習更多有關函數的內容。現在只需要知道:可以把你想要轉換的值放在函數後面的小括弧裡。要說明這一點,最好的辦法就是舉一些例子。在 IDLE shell 中,採用交互模式完成下面的例子。
將整數轉換為浮點數
下面先從整數開始,由它創建一個新的浮點數(小數),這裡要使用 float():
>>>
a = 24
>>>
b = float(a)
>>>
a
24
>>>
b
24.0
注意 b 得到一個小數,末尾有一個 0。這就告訴我們這是一個浮點數而不是整數。變數 a 保持不變,因為 float() 不會改變原來的值——它只是創建一個新的值。
要記住,在交互模式中,可以直接鍵入變數名(而不需要使用 print),Python 會顯示這個變數的值(這在第 2 章中曾經見過)。不過這只在交互模式中奏效,在程式中是行不通的。
將浮點數轉換為整數
下面再反過來試試,從一個小數用 int() 創建一個整數:
>>>
c = 38.0
>>>
d = int(c)
>>>
c
38.0
>>>
d
38
我們創建了一個新的整數 d,這是 c 的整數部分。


是嗎?怎麼會發生這種事情?卡特,我想肯定是你的電腦發瘋了!
當然這只是開玩笑。實際上,這個問題有一個解釋,你可以看看下面的“到底怎麼回事?”。
到底怎麼回事?
還記得我們說過電腦在內部都使用二進位吧?對,Python 存儲的所有數都是作為二進位存儲的。對於 0.1 和 0.2 之和,Python 會用足夠多的二進位位元(比特)創建一個浮點數(小數)來保證 15 個小數位。不過這個二進位數字並不完全等於 0.3,它只是相當相當接近。(在這裡,誤差是 0.000000000000004。)這個差稱為舍入誤差(roundoff error)。
在交互模式中鍵入 0.1+0.2 這個運算式時,Python 會顯示它存儲的原始數值,包括所有的小數位。使用 print 時,你會得到期望的結果,因為 print 更聰明一點,它很清楚要四捨五入顯示 0.3。
這就像問一個人時間。他可能會說“12 點 44 分 53 秒”。不過大多數人都只是說“差一刻一點”,因為他們知道你不需要那麼精確。所有電腦語言中浮點數都存在舍入誤差。對於不同的電腦或者不同的語言來說,你得到的正確的位數可能有所不同,不過都會使用同樣的基本方法來存儲浮點數。
通常舍入誤差都很小,所以不需要擔心這些誤差。
下麵再試試另一個轉換:
>>>
e = 54.99
>>>
f = int(e)
>>>
print e
54.99
>>>
print f
54
儘管 54.99 與 55 很接近,但是得到的整數仍然是 54。int() 函數總是下取整。它不會給你最接近的整數,而是會給出下一個最小的整數。實際上 int() 函數就是去掉小數部分。
如果想得到最接近的整數,也有一個辦法。這個辦法到第 21 章再告訴你。
將字串轉換為浮點數
還可以從字串創建一個數,就像這樣:
>>>
a = '76.3'
>>>
b = float(a)
>>>
a
'76.3'
>>>
b
76.3
注意,顯示 a 時,結果兩邊有引號。Python 通過這種方式告訴我們 a 是一個 字串。顯示 b 時,會得到浮點數值,這裡包括所有小數位(就像卡特之前做的一樣)。
4.2 得到更多資訊:type()
上一節說過,我們通過看引號來確定一個值究竟是數還是字串。要確定它是一個數還是字串還有一種更直接的方法。
Python 還提供了函數 type(),它可以明確地告訴我們變數的類型。
下麵試試看:
>>>
a = '44.2'
>>>
b = 44.2
>>>
type(a)
<type
'str'>
>>>
type(b)
<type
'float'>
type() 函數告訴我們a的類型是 'str',這代表字串(string),b 的類型是 'float',很明白,不用猜也知道這代表浮點數!
當然,如果向 int() 或 float() 提供的不是一個數,它就會不正常。
下麵來試試看:
>>>
print float('fred')
Traceback
(most recent call last):
File "<pyshell#1>", line 1,
in <module>
print float ('fred')
ValueError:
could not convert string to float: fred
我們得到了一個錯誤消息。這個非法文字(invalid literal)錯誤消息說明 Python 不知道怎麼從 "fred" 創建一個數。如果是你,你知道嗎?
4.4 使用類型轉換
再來看第 3 章“動手試一試”中從華氏度到攝氏度的溫度轉換程式,應該記得當時需要修正整除行為才能得到正確的答案,需要把 5 改為 5.0 或者把 9 改成 9.0:
cel =
5.0 / 9 * (fahr - 32)
float() 函數給出了另一種做法:
cel =
float(5) / 9 * (fahr - 32)
或
cel =
5 / float(9) * (fahr - 32)
可以試試看。
你學到了什麼
在這一章,你學到了以下內容。
·
完成類型轉換(或者更準確地說,從某些類型創建另外一些類型):str()、int() 和 float()。
·
直接顯示值,而不使用 print。
·
使用 type() 查看變數的類型。
·
舍入誤差及其出現的原因。
測試題
1. 使用 int() 將小數轉換為整數,結果是上取整還是下取整?
2. 在溫度轉換程式中,可以這樣做嗎?
cel =
float(5 / 9 * (fahr - 32))
這樣呢?
cel =
5 / 9 * float(fahr - 32)
如果不行,為什麼?
3. (挑戰題)除了 int() 不使用任何其他函數,如何對一個數四捨五入而不是下取整?(例如,13.2 會下取整為 13,但是 13.7 會上取整為 14。)
動手試一試
1. 使用 float() 從一個字串(如 '12.34')創建一個數。要保證結果確實是一個數!
2. 試著使用 int() 從一個小數(56.78)創建一個整數。答案是上取整還是下取整?
3. 試著使用 int() 從一個字串創建整數。要保證結果確實是一個整數!


0 留言:
發佈留言