章節二:資料型別與轉換
章節二:資料型別與轉換
目錄1. 資料型別
在Python裡,最常用的資料型別有三種——字串(str)、整數(int)和浮點數(float)。
1.1 字串
首先,我們來認識一下字串,字串英文string,簡寫str
name='千尋' print("Let's play")
字串的識別方式非常簡單——有層名為【引號】的皮,只要是被【單/雙/三引號】這層皮括起來的內容,不論那個內容是中文、英文、數字甚至火星文。只要是被括起來的,就表示是字串型別。
在這組程式碼裡,【'千尋'】、【"Let's play"】都屬於字串型別。
name='千尋'
print("Let's play")
字串,顧名思義,就是由一個個字串起來的組合,字元可以是一個數字、一個字母、一個文字,甚至是一個符號。字串可以表達現實世界裡的詞、語句、表示式等
舉例:
要點提示:
1.文字用『英文引號』括住,建立字串;
2.將字串賦值給變數;
3.使用4個print()函式,分別列印4個變數。
重要的事情說三遍:字串型別必須有【引號】的輔助。不然字串就只能被報錯,無盡地呻吟~
1.2 整數
這就是我們要介紹的,常見資料型別中的第二種:整數,整數英文為integer,簡寫做int。Python世界的整數其實和現實世界數學中定義的一樣:是正整數、負整數和零的統稱,是沒有小數點的數字。
整數其實是一個不帶小數點的數字,可以不穿名為引號的馬甲,直接跟print()函式組團搞輸出,比如下列程式碼:
字串有【引號】的保護,可以和符號及其他文字類資料,譬如中文、英文隨意組合。
而整數脫掉了【引號】馬甲,只能『單獨行動』。一旦碰上符號及其他文字類資料,譬如中文、英文,立馬被報錯秒殺。
比如像這樣:
1.3 浮點數
浮點數非常好識別,它比整數多了一個小數點『.』,比如下列程式碼中的數字都是浮點數。
1.0
3.14159
-0.33
浮點數的英文名是float,與整數(int)和字串(str)不同,浮點數沒有簡寫。
浮點數可能讓你有點眩暈,這是因為,與【整數運算結果永遠精確】的特點不同,計算機裡浮點數的運算是不精確的,會有四捨五入的誤差。
比如像這樣:
為什麼不是【0.85】,而尾巴多了一個【1】呢?這是因為,Python計算浮點數時,會先把0.55和0.3轉化成二進位制數【注:二進位制數由0和1表示,逢二進一】,如下:
# 進位制轉換
0.55(十進位制) = 0.1000110011001100110011001100110011001100110011001101(二進位制)
0.3(十進位制) = 0.0100110011001100110011001100110011001100110011001101(二進位制)
而在這個轉化過程中存在誤差,這樣,就造成了我們與程式計算結果的差異。
然後,這倆二進位制數通過二進位制法則運算後,再通過複雜的計算公式,將二進位制結果轉成十進位制小數。
這就是我們最常接觸的三種資料型別:字串、整數、浮點數的全部內容了
2. 資料的應用
2.1 四則運算
Python裡的整數、浮點數和數學意義的整數、小數是一樣的,它最重要的作用是與運算子號結合,進行數學計算。接下來我們看一下Python如何利用整數,浮點數進行四則運算。
但是Python世界的算數運算子,和我們平時在紙上寫的運算子號有相同點,也有不同點。
首先,我們來看看Python世界的運算子。
咱們再說說一樣的——運算優先順序:Python世界的運算優先順序,和我們平時的計算優先順序是一樣的。
比如像這樣:
詳解:來看看【print((5025-525)/100+1817)】的運算順序:最先計算括號裡的【5025-525】。然後將【5025-525】的結果除以100,第三步則計算【1817】,最後將除法和乘法的結果相加。
2.2 字串的拼接
比方說,我有以下幾個零碎的『詞語』——變數,然後想合成這樣一句話:我是風變程式設計學員007,在映象世界裡進行身份驗證,該怎麼做呢?
hero = '我'
organization = '風變程式設計'
identity = '學員'
action = '是'
ID = '007'
# 輸出結果
我是風變程式設計學員007
這就涉及到了——字串拼接。字串拼接的方法可簡單了,就是利用字串拼接符號【+】,將需要拼接的變數連在一起就行了。
比如像這樣
有了拼接符號,我不僅可以輸出【我是風變程式設計學員007】,還可以調整變數的拼接順序,輸出不同的內容。
還可以像這樣
這就是我們字串拼接部分的要點:
2.3 資料型別的查詢——type()函式
舉例:
夢想是美好的,但現實是殘酷的,我們立馬被報錯【TypeError:can only concatenate str (not "int") to str】(型別錯誤:只能將字串與字串拼接)無盡地呻吟。
雖然通過報錯提示,我知道了錯誤來源於print()函式內,資料型別的拼接錯誤。
但是到底是哪個資料型別不對呢?我們觀察上面程式碼裡變數的值,發現了【number = 153】中的【153】沒有【引號】和【小數點】,是一個整數,原來『奸細』就是它。難怪當時在終端區會給我報錯說:資料型別不同呢。
但是,由於變數是由我們定義的,所以我們可以用人眼查詢錯誤源。
在未來,當我們學會了更為複雜的命令,可以用程式碼對其他人提問,收集其他人的答案時,我們無法確定他們回覆你的內容,是用什麼資料型別寫的。
所以,我們要學會善用Python的魔法,使用Python中一個已有的,既簡單又實用的函式,來幫助我們查詢不確定資料的型別。而這個函式,就是type()函式。
那麼,這個type()函式要怎麼使用呢?答案就是:只需把查詢的內容放在括號裡就行。
比如像這樣
終端裡出現的結果,是不是除了4個<class 'str'>,還有1個<class 'int'>?
3. 資料轉換
在type()函式的幫助下,我們知道也可以查找出字串裡面出現的『奸細』——整數。
可是為什麼不同型別的資料不能拼接在一起呢?一句話:圈子不同不相融。
要如何把兩個不同型別的資料拼在一起呢?這就涉及到了我們這關最後一個知識點:資料轉換。
負責轉換資料型別的函式一共有3種:str()、 int()和float()。
3.1 str()函式
str()函式能將資料轉換成其字串型別,不管這個資料是int型別還是float型別,只要放到括號裡。這個資料就能搖身一變,成為字串型別。
比如像這樣
整數轉換字串型別的方法是不是很方便?那如果我告訴你,還有一種轉換成字串的方法:
print(str(number)+expression+action+unit+magic)
print('153'+expression+action+unit+magic)
你看,我們是不是用兩種不同的寫法:str()函式和引號,輸出了同一種結果?
可是,為什麼引號內我們使用的是數字,而不是變數名number呢?這是因為,當我們使用引號時,引號裡的東西,都會被強制轉換為字串格式。
所以,如果我們把變數名number放進引號裡後,被強制轉換為字串的,將是變數名number,而不是變數名代表的數字153。
3.2 int()函式
既然整數型別能轉換為字串,那字串型別能轉換為整數嗎?那必須的。
將資料轉換為整數型別的方法也很簡單,就是int()函式。其使用方法同str()一樣,將你需要轉換的內容放在括號裡就行,像這樣:int(轉換的內容)
比如像這樣
要點提示:
- int()函式轉換資料型別;
- 運算子+計算;
- print()函式】
不過對於int()函式的使用,大家要注意一點:只有符合整數規範的字串類資料,才能被int()強制轉換。
別看它雖然只有一句話,但它其實帶有三層含義:首先,整數形式的字串比如'6'和'1',可以被int()函式強制轉換。
其次,文字形式,比如中文、火星文或者標點符號,不可以被int()函式強制轉換。
最後,小數形式的字串,由於Python的語法規則,也不能使用int()函式強制轉換。
比方說下列程式碼,如果點選執行,程式會報錯【ValueError:invalid literal for int() with base 10: '3.8'】(值異常:浮點型別字串無法使用int()強制轉換)。
這是不是意味著,浮點數不能轉換成整數型別了?
不,雖然浮點形式的字串,不能使用int()函式。但浮點數是可以被int()函式強制轉換的。
上方的程式碼串,就是一條將浮點數3.8強制轉換的語句。但是,為什麼輸出的結果是3呢?
你看,int()函式的本質是將資料轉換為整數。所以對於浮點數,int()函式會做取整處理。但是,同我們平時對小數四捨五入的處理方法不同,int()函式會直接抹零,直接輸出整數部分。
3.3 float()函式
可是,如果遇到這種情況:字串就是小數形式,比如'3.8'這種。我不想讓它變為整數3,想讓它保持小數形式的3.8,那我要怎麼做呢?
這就涉及到了——float()函式。
首先float()函式的使用,也是將需要轉換的資料放在括號裡,像這樣:float(資料)。
其次,float()函式也可以將整數和字串轉換為浮點型別。但同時,如果括號裡面的資料是字串型別,那這個資料一定得是數字形式。
比如像這樣
下面,我們通過一張圖小結一下這三個函式。
4. 本章小結
5. 習題練習
5.1 習題一
1.練習介紹:
在Python的世界,最常用的資料型別有三種:字串(str)、整數(int)和浮點數(float)。
在資料拼接中,為了將不同的資訊進行整合,可以使用拼接符號。但是,如果資料非字串型別,則無法進行拼接。
此時,我們可以使用資料轉換函式str(),將資料轉換為字串型別後,再進行拼接。
2.題目要求:
number1 = 1
number2 = 2
unit1 = '人'
unit2 = '眼'
line1 = '我程式設計累'
line2 = '是bug相隨'
sentence1 = '碎掉的節操滿地堆'
sentence2 = '我只求今日能早歸'
請運用所給變數列印兩句話。
第一句話:1人我程式設計累碎掉的節操滿地堆
第二句話:2眼是bug相隨我只求今日能早歸
方法一
使用str()函式列印兩句話
方法二
使用引號列印兩句話
5.2 習題二
1.練習介紹
在資料拼接中,為了將不同的資訊進行整合,可以使用拼接符號。
但是,如果資料非字串型別,則無法進行拼接。此時,我們可以使用資料轉換函式str(),將資料轉換為字串型別後,再進行拼接。
並且針對不同型別的資料,我們需要經歷多次轉換,最後才能轉為字串型別。
2.題目要求
slogan = '臉黑怪我咯'
number = '7.8'
unit = '張'
sentence = '藍票一個SSR都沒有'
請運用所給變數,使用資料轉換str()、int()、float()及資料拼接符號+,列印一句話: 臉黑怪我咯7張藍票一個SSR都沒有
備註:先轉為小數,再取整,轉化為字串拼接
節選自風變程式設計學習筆記:https://www.pypypy.cn/