【Python系統學習02】資料型別與型別轉換
一、資料型別
- 字串
- 整數
- 浮點數
【補充中...】
1、字串 str
字串:英文string,簡寫str。
name = '小石頭:'
print(name,'2019', '12', '24')
# 小石頭: 2019 12 24
print("平安夜,祝你一生平安。Merry Christmas!")
# 平安夜,祝你一生平安。Merry Christmas!
以上,包裹在單引號和雙引號裡邊的內容,如‘小石頭’
、‘2019’
這些就是字串。
換言之,但凡包裹在英文格式下的 單引號、雙引號或三引號 裡的內容,不論引號裡邊是英文、中文、甚至是數字、符號、火星文等,她都叫做字串。
- 強調⚠️ 引號!引號!引號!!!
2、整數 int
整數:英文為integer,簡寫做int。
year = 2019
month = -12 # 可以為負數
day = -24 + 12 # 可以做運算
print('Today is',year,month,day)
# Today is 2019 -12 -12
以上,2019
、12
、24
這三個都是整數。
沒有引號包裹的、沒有小數點的、整數數字,就是整數型別。
注意⚠️:一旦數字被引號包裹,他就是字串型別。
3、浮點數 float
浮點數: 英文名是float,與整數(int)和字串(str)不同。
浮點數沒有簡寫。
換言之,帶小數點的數字即是浮點數。
比如下列程式碼中的數字都是浮點數。
print(20.19)
# 20.19
print(-12.25) # 可以為負數
# -12.25
print(520.1314 + 07.11) # 可以做數學運算
# 527.2414
注意⚠️:同樣不能有引號包裹。
浮點數還有一個計算結果有精度誤差的問題。詳見下邊番外篇。
二、型別查詢
type()函式
1、type()函式作用
查詢、獲取資料的型別。
既然存在不同的型別,我們就需要一個型別檢查工具,來告訴我們這個資料究竟是什麼型別。
2、type用法
只需把查詢的內容放在括號裡就行。
name = '俺是字串'
value = 123
flr = 12.4
numberStr = '123'
# 如下使用type:
print(type(name))
# <class 'str'>
print(type(value))
# <class 'int'>
print(type(flr))
# <class 'float'>
print(type(numberStr))
# <class 'str'> 儘管是123數字,只要包裹在英文引號中就是字串
如上列印結果,代表型別的樣式為<class '型別'>
。其中:
str代表字串,全稱為string
整數的英文簡稱為int,全稱為integer
float就是浮點數型別
三、型別轉換
- str()函式
- int()函式
- float()函式
所謂,道不同不相為謀,不同型別的資料不能拼接在一起。也不能一起共事。為了讓他們一起共事,就有了型別轉換這麼一個“和稀泥”的操作:
python是型別嚴格的語言,不像JS那樣的若型別語言,會自動進行型別的隱式轉換。所以當不同型別的資料進行結合時,需要我們手動強制進行型別轉換。
強型別語言裡,不同型別的資料之間需要進行型別轉換才能一起“共事”。
比如,1+'1'
這麼寫,在js中肯定沒問題,因為會進行隱式型別轉換,把數字1變成字串1,然後就變成了字串拼接,最後的到11。
但是python不會進行隱式型別轉換,他發現你用數字1+字串1,就會報語法錯誤。
因此當我們把兩個不同型別的資料進行結合處理時,應該手動將其中一方的型別轉換統一成跟另一方一樣的。
依舊以1+'1'
為例,進行手動型別轉換的方法示例:
a = 1
b = '1'
# print(a + b)
# # 這麼寫報錯。改正如下:
print(a + int(b))
# 2,將字串轉換為int型別,進行加法運算
print(str(a) + b)
# 11,將整數轉為字串型別,進行字串拼接。
負責轉換資料型別的函式一共有3種:str()、 int()和float()。
1、str()函式
str()函式能將資料轉換成其字串型別,不管這個資料是int型別還是float型別,只要放到括號裡。這個資料就能成為字串型別。
1-1、整數/浮點數 - 轉為字串
運用:
# str()
who = '我'
age = 18
item = '歲'
print(who+str(age)+item)
# 我18歲
#通過str(age)一個步驟,可以將整數型別的【18】轉化為字串型別的【'18'】,成功完成資料拼接。
以上是一種整數轉換為字串的方法。
1-2、第二種整數轉換為字串的方法 - 直接上引號
借用【引號】的幫助,直接將數字轉為字串:
# str()
who = '我'
age = 18
item = '歲'
print(who+'18'+item)
# 我18歲
缺陷:引號內我們使用的是數字,而不是變數名age。這是因為,當我們使用引號時,引號裡的東西,都會被強制轉換為字串格式。如果使用變數名age,這裡就會把age這個變數名轉換為字串,打印出“我age歲”
2、int()函式
將其他資料轉換為整數型別。當引數為小數時,會做抹零、取整
處理。不會進行四捨五入的哦!
使用方法同str()一樣,將你需要轉換的內容放在括號裡就行,像這樣:int(轉換的內容)。
# int
num1 = '1'
num2 = '8'
print(int(num1)+int(num2))
# 9
注意⚠️:只有符合整數規範的字串類資料,才能被int()強制轉換:
首先,整數形式的字串比如'1'和'8',可以被int()函式強制轉換。
其次,文字形式,比如中文、火星文或者標點符號,不可以被int()函式強制轉換。
- 最後,小數形式的字串,由於Python的語法規則,也不能直接使用int()函式強制轉換。比方說下列程式碼,如果點選執行,程式會報錯。
print(int('1.8'))
# ValueError: invalid literal for int() with base 10: '1.8'
# (值異常:浮點型別字串無法使用int()強制轉換)
雖然浮點形式的字串,不能使用int()函式。但浮點數是可以被int()函式強制轉換的
可以先將字串轉換為浮點型別,再將浮點數轉換為int型別。
print(int(float('1.8'))) # 1,先將字串'1.8'轉換為浮點數1.8,再直接對浮點數1.8取整的到數字1
3、float()函式
3-1、使用
將需要轉換的資料放在括號裡,像這樣:float(資料)。
3-2、規則
float()函式也可以將整數和字串轉換為浮點型別。
但同時,如果括號裡面的資料是字串型別,那這個資料一定得是數字形式。如'2.3'
,'52.1'
這樣,而不是'我是漢子'
這樣的純文字
weight = 43.2
print(float(height))
# 43.2
四、資料型別的應用
- 字串拼接
- 四則運算
1、四則運算
Python裡的整數、浮點數和數學意義的整數、小數是一樣的,它最重要的作用是與運算子號結合,進行數學計算。
2、Python中的運算子
運算子 | 含義 | 示例 |
---|---|---|
+ | 加 | 1 + 1 |
- | 減 | 2 - 1 |
* | 乘 | 1 * 2 |
/ | 除 | 4 / 2 |
% | 取模 - 返回除法的餘數 | 5 % 2 得到5除以2的餘數 |
** | 冪 - 返回x的y次冪 | 2 ** 3 得到2的3次方 |
// | 取整除 - 返回商的整數部分 | 11 // 2 得到11/2的商再取整 |
對上表中的運算子寫幾個例子執行一下:
# 運算子示例
print(20+19)
# 39
print(2020-1993)
# 27
print(20191231*20200101)
# 407864905514331
print(2020/10)
# 202.0
print(23%45)
# 23
print(2**3)
# 8
print(11//2)
# 5
3、運算優先順序
和我們平時的計算優先順序是一樣的:
從左到右計算,括號裡的優先計算。
先乘除,後加減。
# 先口算,再執行,看你算的對不對。
print(1234*124+325235-1251)
print((6236-124)/125+326*23)
4、字串拼接
這就和Javascript中的一樣了
非常簡單,就是利用字串拼接符號【+】,將需要拼接的變數連在一起就行了。
# 字串拼接示例
a = '我'
b = '叫'
c = '小'
d = '石'
e = '頭'
print(a+b+c+d+e) # 我叫小石頭
切記⚠️:做字串拼接也好、運算子表示式也好,+號或其他符號兩邊的資料型別必須一致,否則會報錯TypeError(詳見第三篇錯誤型別合集B項錯誤記載)。
五、番外 - 浮點數計算精度問題
運算下邊的程式碼:
print(0.55+0.3)
# 0.8500000000000001
發現列印結果並不顯而易見的0.85,而是0.8500000000000001。
為什麼不是【0.85】,而尾巴多了一個【1】呢?這是因為,Python計算浮點數時,會先把0.55和0.3轉化成二進位制數【注:二進位制數由0和1表示,逢二進一】,如下:
# 進位制轉換
0.55(十進位制) = 0.1000110011001100110011001100110011001100110011001101(二進位制)
0.3(十進位制) = 0.0100110011001100110011001100110011001100110011001101(二進位制)
而在這個轉化過程中存在誤差,這樣,就造成了我們與程式計算結果的差異。
然後,這倆二進位制數通過二進位制法則運算後,再通過複雜的計算公式,將二進位制結果轉成十進位制小數。
原網頁地址
2019.12.31