好,那我們接著呢要來介紹一下 Casting,Input/output,還有
Assignment,那這個是幹嘛呢? Casting 是所謂的形態轉換,那我們剛才介紹過形態嘛,我們
知道呢,我們有各式各樣不同的變數,變數有各式各樣不同的形態。
所以形態之間呢,偶爾需要一些轉換,所以我們可以來多理解一下關於變數形態轉換之間- 的事情。
那另外呢,我們之前學過 input output,所以我們可以跟程式
做基本的互動,那我們現在多了一些知識,所以我們可以做點更複雜的事情啦。
最後,因為我們已經知道了形態的關係,所以對於把一個值 assign
給一個變數的 這件這麼基本的事情,我們也有多一些事情可以講。
好,那我們就來加強一下我們的基本功。
所以呢,我們先講 casting 形態轉換。
這個東西呢,基本上講的事情也很簡單。
就是我們把一個值 從一個變數的形態變成另一種的形態,那這樣子的
動作 type conversion,我們就叫它 casting。
比如說啊 我今天如果有一個 float 或是有一個
string,我可以把它們變成一個整數,使用 的方式呢,就是用剛剛看到的這個
int 的函數,int 這個函數裡面,如果沒有傳東西進去,它就會給你 0。
如果有傳東西進去,它就會試著把它轉成整數。
那我們來看這邊的例子。
第一個例子呢,是說 f 是 52.0,我把它轉成
int 然後把它 assign 給 i 的話,i 就會是一個整數,而且
i 會是 52,右邊這個例子 s 本來是一個字串 52,我把它轉成
int 了以後呢,i 會變成一個整數,它也會 是
52。
好,我們來試一下。
所以第一個例子來說,你可以看到被印出來的 f 是 52.0,而
i 是 52,f 的 type 是 float,而 i 的 type 是
int,所以相當地符合 我們的理解。
在第二個例子裡面呢,s 是 52,i
也是 52 熒幕上看不出差別,但是如果你印它的 type 的話,一個是字串 52,一個是整數 52。
那這樣子就看得出來,它們的形態其實是不一樣的。
那麼我們今天呢,例子當然不僅於此。
你看哦,今天如果我嘗試 把 52.6
轉成整數的話,會發生什麼事情呢?欸,是 52 還是 53 呢? 好像有試一下的必要,對吧。
或是我把一個根本就不是整數的 真的是一串字的字串,想要把它轉成整數會發生什麼事情,我們來試一下。
那這個某方面來講是學程式設計最棒的地方,就是
你有什麼好奇的事情,你就試一下,你在任何時候都可以試一下,你就會看到結果。
好。
我們先試試看左邊這一個,我現在要把 52.6
來轉成整數,那麼我如果做下去的話,會發現,欸,i 會變成
52 而不是 53,好,也不是別的數字,它就會變成 52。
這表示什麼呢,我會做無條件捨去。
好,我給你一個小數,你要把它轉成整數的話,它會把小數點後面的所有東西全部都
清掉,只留下整數的部分,好,所以這是小數轉整數在至少 Python 裡面的規則。
那麼今天
如果我在這裡,在字串裡面有一些其他的字樣,好,亂七八糟、 亂改一通。
欸,它跟你說什麼呢,噼里啪啦地看不大懂,但總之它的意思 是跟你說 invalid literal for
int () with base 10: blah blah blah… 意思就是說,你傳給
int 的內容根部就不是一個 數字,你沒有辦法把
52 is blah blah blah 轉成整數,所以它會跟你說,你的程式出錯了。
好,大概是這個意思。
所以呢,int 這個函數當然好用,但不是萬能的。
好,你傳給它合理的東西,它才會跑出 合理的結果來。
好 那麼呢,如果我想要把整數或者是字串轉成 float 我就用 float 這個函數啦,這想想也是很合情合理的。
float 這個函數如果你沒給它東西, 它會給你 0.0,如果你有給它東西的話,它就會給你小數。
所以,我們就直接看例子,來知道它在幹嘛就可以啦。
以第一個例子來說,i 是 52,把它轉成 float,看看會怎麼樣。
欸,轉出來的東西 是 52.0,那很明顯地,小數轉整數可能會被切掉一些東西
但是整數轉小數就不會,它只要在它後面補上 .0,然後理解它為 float 就可以了。
所以不管你把什麼樣的整數要轉成小數,基本上都是這樣,你不會發生 有一些值不見,或者是這個誤差等等,不會的。
好,它基本上就是會很完美地加上一個 .0 就是這樣子。
那今天如果呢,我本來的值是一個字串的話,會發生
什麼事呢,如大家所見,本來是 52 這個數字。
欸,應該說這個字串 它被轉成 float 以後,也一樣就變成 52.0,所以是完全可以理解的。
把整數轉成 float
就如我們剛剛所見的,不會發生任何 的
Error,不會有 precision lost,精確度不會出現一些誤差,但是也不可能有 值被改掉的這個可能性。
那麼,如果你嘗試要把奇奇怪怪的字串轉成 float 的話, 會發生什麼事情呢?那當然就是會爆炸嘛。
你等一下試試看,你就會看到一樣的 error message。
好,那最後呢,就是關於這個我們把東西轉成字串,也是可以做的。
我可以把 float 或者是 int 轉成字串,那我們使用的就是 str 這個函數啦。
好,所以這個時候呢,大家來試一下這個例子。
好。
這個在幹嗎呢?i 是 52,s 是 i 轉成 52 以後的結果。
那麼我 print i 是 52,print s 是 52 int str
分別是 i 跟 s 的 type,而且 s 因為
是一個字串,所以它還可以被放進 len 這個函數裡面,可以看到長度確實是 2。
因為是兩個字元嘛,這樣子。
好,那麼這裡是把 f 轉成字串,把 f 轉成字串的話呢,
哦,就點 0 的部分也會被原原本本地被轉進來,你就會變成 52.0。
然後呢 float str,然後 4。
4 是什麼,4 是 s 這個字串的 長度,也就是
52.0 這四個字,那合起來的長度就是 4 啦。
那大家可能會問啦,欸,我沒事幹嘛要做這些型別轉換。
呃,有很多理由。
那有的時候呢,是因為你在運算的過程中你必須要這個
把握你的精確度啊,或者是節省空間啊等等,或者是加快速度,那這個都有可能。
那一個比較 容易理解的情況就是,經常你在做運算的時候,是用數字在做運算
你這個 42 加 8 啦,除以 6 啦等等之類的,但是你要輸出
的時候,可能是要用字串來輸出。
比如說你今天寫得如果是一個會計系統的話,你輸出的時候可能視情況前面要加上 dollar sign 你要加一個前置號。
或者是呢,你輸出 3682 的時候,希望在 3 跟 6 中間打一個逗點,這都有可能吧。
或者是你要輸出的東西 是日期格式,輸出的東西要加百分比符號等等。
如果你要做這些 數字的前後左右要加這些各式各樣的符號,或者是做處理的話,那你可能要用字串來輸出就比較
方便啦,好,大概是這樣子的意思。
那麼,多講無益 大家有遇到 application 的時候,自然就會發現,哦把東西轉成字串或是反過來轉,是有用的。