【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

以上,20191224這三個都是整數。

沒有引號包裹的、沒有小數點的、整數數字,就是整數類型。

注意⚠️:一旦數字被引號包裹,他就是字元串類型。

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