[音樂] [音樂] [音樂] [音樂] [音樂] [音樂] 各位同學大家好,本講次 要跟各位介紹這個有關於這個 string,就是字串的處理。 那字串在 Python 裡面 可以說是非常地重要,那也非常地 powerful,那很多人使用 Python 事實上只是因為 看中它這個,對於這個一些字串的處理 的資源是非常完整。 那所以這個,我們 那所以我們就從這個 String Data Type 來說起, String Data Type 它事實上就是這個 Python 裡面的一個資料型別, 我們事實上在平常很多使用 這個 PC 的經驗裡面,常常也有發現說,其實這個 就是對於這個文字的操作是非常重要的。 就比如說, 像現在大家常常使用 Facebook 還有 Line 之類的東西, 那其實這個很多時候呢,大家都是在做 PO 文,或者是 PO 照片, 那如果你是 PO 文的話呢,那事實上它就是一種這個,在後端的系統,它事實上就是 處理你輸入的文字。 所以就是說它後面必須做一些文字的處理。 那另外一個部分,就是這個文字的輸出,對不對?就是說別人要 看得到你的 PO 文,對不對?所以它必須要對你的這個輸入,對你打進去的那些東西做某種的這個 整理跟編排,讓大家可以方便地,可以閱讀。 所以這個, 很多部分你可以想象,就是說很多這一類的這種系統,它在後端其實 就是很大一部分是在處理文字。 那文字對應到在 Python 裡面,它就是是 一個這個所謂的字串的資料的型別,還有字串的 這些,這個的處理。 那所以這個,所以我們就是要,今天要講的就是這個 String Data Type, 那這個 String Data Type 簡單地說呢,就是說你在這個 寫這個 Python 的這個程式的時候呢,你如果說定義一個變數, 然後呢,這個變數等於某個值,這個值是用單引號或者雙引號把它 括號括起來的,把它這個包圍起來的這個部分,它就是一個字串。 那在 Python 裡面呢,這個單引號跟雙引號事實上是沒有差別的。 就是說呢,這邊 這個單引號或者是雙引號基本上功能是一樣的,就是隨你喜歡。 那很多時候,有人會說那為什麼要同時有單引號又有雙引號呢?其實有些時候就是說,如果你- 的字串是 比如說這個是這樣,比如說 this is a ,比如說這邊是個單引號, 然後你這邊用一個雙引號括起來,那就沒有問題。 因為這時候呢, 比如說這邊是 a 等於這樣子,這是沒有問題的。 因為它知道說呢, 這個雙引號是拿來做引號用的。 那如果這裡面呢, 你的字串裡面如果有雙引號的話,你就可以用單引號去做括號,對不對? 對不起,這個地方是…… 對不對?好,那這樣也不會有問題,就是說呢, 它事實上就是給你一個方便性啦,大概是這樣子。 那除此之外,大概就是說, 我們後面還會陸陸續續介紹一些這個相關的一些特性。 那所以我們看一個,一些簡單的 例子,比如說你可以說 str1 是這樣子,str1 是 這個 hello,對不對?然後 str2 是 ntu, 然後呢,那 你可以說呢,我們 print (str1 ,str2),對不對? 那這時候呢,它就會把 str1 跟 str2 合起來,它中間會加一個空格。 那你如果問它說,那你這個 str1 的 type 是什麼呢?它就會告訴你說,它是一個 str class。 那如果是 type2,它基本上也是一個 str class。 那它會是 string 的原因就是你一開始 這個定義它的時候,你是說它是用一個單引號或者是雙引號的 這個包圍起來的一串東西,那這個東西就是字串。 好,大概是這個樣子。 那我們事實上 在之前的很多課程裡面,事實上已經在用這個東西了。 那我們今天就是說需要把這個東西呢, 講得更清楚一些,更有系統性地一些,跟各位 介紹這個 string 這個資料型別,因為它真的是非常地重要。 那我們這樣之前用這個 input 這個函數的時候呢,事實上我們已經在使用 string 這個 Data Type 了。 好,原因是因為,就是說呢, input 它會把你在鍵盤上面打的東西,把它 回傳到一個這個變數裡面。 那這個變數呢就會是以 這個字串,就是 string 的這個型別來儲存。 比如說呢,我們 如果說用這個簡單的例子說,input 然後是 please enter your name, 像這個樣子的話,那你按 enter 了之後呢,Python 就會把這個 你這個提示的訊息印出來,對不對?please enter your name,然後就會等你,對不對?那你如果 打說 Diana,那我們可以說,哦 我們問候一下,print hello 好了,逗點, aname,aname 就是它把你這個 input,你在鍵盤 上面打的東西存到這個 aname 這個變數裡面,對不對?所以 你叫它 print hello,然後逗點 aname 的時候,它就會, 印出 Hello Diana,然後這時候 這個空格是因為這邊是有兩個不同的字串,那它預設 如果說,你要 print 兩個字串,它會用一個這個 空白把它分開來,當然你可以叫它不要加這個空白。 那所以整個 string 呢,簡單地來說呢,它就是 一串字母,對不對?Diana,對不對,D-i-a-n-a,它就是 五個字母所組合的嘛。 所以說呢,字串基本上就是你可以看成它是一串 的字母,一串的 characters。 那這一串 東西當然是有先後次序,先後次序一亂,它肯定是別的字串。 那有些時候我們會 希望能夠存取這個字串裡面的 這個,單一個這個字元,或者是某一個 subset 的字元,所以這時候呢, 在這個字串的資料型別裡面呢,我們事實上可以 用一個 index,這個 index 它是由左至右的,最左邊是 0, 再是 1,再是 2,再是 3,再是 4,這樣一路下去。 那你如果有字串長度是 5 的話,它就會是從 0 到 4, 大概是這個樣子。 那它是從 0 開始的,那所以我們舉一個 簡單的例子。 比如說我們現在定義一個字串叫 str1,它叫做 bulimia, 那如果你定義了這樣子的一個字串之後呢,它在 這個電腦內部,它的儲存的方式它就會像是這樣子, 它就會有一塊記憶體。 那這塊記憶體呢,第一個位置就是存 b,第二個位置存 u, 再來是 l, i, m, i, a,那合起來就是 bulimia。 然後呢,因為這個 bulimia 它總共有 7 個 character, 所以它的這個 index 就是從 0 到 6。 0,1, 2, 3, 4, 5, 6, 所以你如果問它是 str1 的 方括號 0 的話,它就會告訴你 b 嘛,因為第一個位置,就是 index 0 的地方是 b, 那位置 1 的地方就是 u,位置 2 的地方就是 l,那這個 index 從 0 開始, 對某些人來說可能不是那麼的熟悉,但是這個東西就是還蠻常用的,常常是 用這樣子的形式。 那另外一個要注意的,就是說呢,我們如果在 存取這個字串的某一個位置的時候呢,是用方括號裡面 加上整數的 index,對不對?那這個跟之前我們 用來使用我們的呼叫函數,是不大一樣,呼叫函數的時候呢 做的事情事實上是用 圓括號,事實上是用圓括號來做的。 所以,圓括號呢 前面接的東西呢,Python 就會假設說,你事實上是一個函數。 那這個如果是方括號的話呢, 這個它有可能是字串或者是其他東西,比如說像 list 之類的東西。 所以這個圓括號跟方括號也是一個大家要能夠分辨的東西,有些時候就是 我們在寫程式的時候,就是有時候 這個腦袋可能不是那麼清楚,對不對。 那出現 bug,那出現 bug 之後,你就要回來想說,欸,到底是什麼問題,好。 那有時候我們會寫錯了一個事情,就是是圓括號和方括號寫錯了,所以這個是先跟各位提- 醒一下。 到時候大家自己在寫作業的時候的話,遇到這類問題,自己就會要知道啊。 那 另外就是說有一些比較特別的,除了就是說從零開始,然後呢往下 這個 123456 之外呢,那另外一個做法呢,事實上是 事實就是說呢,你事實上可以倒過來這個 存取這個每一個字元,就是說呢 這個是 Python 特有的做法,那比如說呢 你如果有這個像 bulimia 這個字呢,那你如果是用 -1 這個 index 的時候呢,它就會抓到倒數第一個字。 -2 的話,就會抓到倒數第二個字,然後 -3 就會抓到倒數第三個字,那這個是 這個 Python 比較特別的一個做法了。 那這種 -1-2-3 這個的表示法好像是 不同的語言會不一樣,它不是說每個語言都是這樣,它是 Python 是這個樣子。 那 所以呢,我們如果說,這個另外一個我們常見的這個做法就是說,有時候需要 不只是要存取這個某一個character,我們需要存取這個字串裡面 的一小段,就是有點像如果你的字串是一大篇文章的話, 那比如說,我們想要把其中的一句話抓出來,對不對?那你要把一句話抓出來,你必須要知道 這句話是從哪個位置開始到哪個位置結束,對不對?你如果這個開始跟結束的資訊 之後呢,你就可以用這個 slicing 的方式把這一句話拉出來。 那拉出來的方式就是如同這邊寫的,這個 string 這邊就是代表這個變數的名字,然後用個方括號 然後用開始跟結束的 index,中間用一個 這個冒號來分開,然後呢 你就可以把這個整個比較長的字串 裡面的一個小的這個字串,把它 slice 出來,就是把它切 把它這個你要的部分切割出來,那要比較注意的 就是說呢,這個開始就是它會從開始 你提供的這個開始的位置開始抓,但是它會抓到 這個你提供的這個結束為止的前一個。 那這個是比較特別的地方,比如說呢,我們看這個例子,我們一樣兇犯是 bulimia。 那你如果說,叫它是把 3 到 5 的部分抓出來,它會抓 3 是 i 嘛 然後呢,這兒是 4,然後呢它會抓到 5 的前一個,所以就只有 im 而已,好,只有這兩個字。 那如果是 2 到 6 的話呢,你看到 2 是 l,然後呢,im ia,它會抓到 6 的前一個,因為我們講是 2 到 6 嘛,所以就只有 到 limi,只有 limi 這個停止的地方。 那你如果不小心寫超過會怎樣呢,我們的位置就到 6,你寫到 8 會怎樣,這時候 Python 它也不跟你啰嗦,它就直接把 所有它可以傳回來的傳回來,比如說呢,是 2 到 8,對不對。 2 是 l 嘛,limia 只有 7 沒有東西,對不對。 那它 不會多傳,它就會是 limia 到最後 所有可以傳回來的都把它傳回來,那到 10 也是一樣,傳回一樣的東西。 那這個結尾,結尾這個 整數事實上你是可以忽略,如果你是要從 2 開始所有的東西,你就寫 2 冒號就好了。 你就把這個結尾忽略,它就會把這個所有從 2 開始的 limia 全部都傳回來,好。 那同樣的事情,你可以把這個頭把它忽略,你把頭忽略的話,寫冒號 5 的話呢,它就是把從一開始傳到位置 4,所以是 bulim。 對不對,好。 因為位置 4 是 m 嘛。 好,大概是這個樣子。 所以這個是 slicing,那 slicing 就是我們有事沒事就會遇到的,所以就是說大家要熟悉一下 slicing 的這個做法。