主題

從零開始的python ep.5 (字串的方法)

黑子 | 2021-03-22 16:16:24 | 巴幣 12 | 人氣 57

介紹完格式,接著介紹方法,這邊比較複雜,也有比較多的變數與引數 (這也是python不能用理解or邏輯來處理的部分,必須要了解每個方法它的規則與可以使用的參數)方法至少有二十幾種,這邊僅列出常用的那些
另外字串處理跟list dict tuple有部分差異(有相同的部分下方內容有提到)
關於容器的詳細方法請看第六章

str.strip()
()可以填入要清除的符號,它會從左右兩邊開始清除,直到碰到沒有要被清除的字元
()也可以不填,它會清掉文字前後的空白 \t \n,不能用來處理list dict或tuple

所以\n \t 空白都被清掉了

另外rstrip 跟.lstrip 分別是從尾或是從頭開始清除

上面的示範中當頭尾開始清除0,此時2200ASF中的0就不會被清掉

str.split()
如其名功能是分割
會以list形式 作為回傳值  

通常用來處理使用者輸入的字串,並進行分類,預設是以空白鍵作為分割
這邊是用"i" 來分割,所以空格被保留了(所以i不見了)

str.partition(sep)
只會分割第一個符合sep條件的字串
範例

sep是必填的沒有預設值,如果沒打東西會typeerror
一定要找空白,就用partition(" "),所以可以很簡單的理解partition只會切兩刀,兩刀中間是你要切的,兩刀之外是你不要的,結果就是 3-tuple
(當然只會切出從頭開始遇到的第一個,所以尾巴還有的就不會切出來)

str.count(sub[, start[, end]])
計算str 字串中sub 子字串出現的次數是要搜尋的字串,一定要給值,可以只給start 但是不能只給end,不給start,另外tuple中count不能設定範圍
以程式碼做示範
n= input("請輸入一段文字內容:")
m=input()
n.count(m)
print(n.count(m))
來看看結果
可以找中文(python支援utf-8),也可以找英文(可以看到A不會被視作a計算在裡面)

str.index(sub[, start[, end]])
可以從str中找到第一個出現的位置,有回傳值(int),但字串或list中沒有的話不會顯示-1或none
缺點是只會找第一次出現的,所以有時候我們會給範圍,如果要找字串或是list中,是不是有重複出現,請用find

str.find(sub[, start[, end]])  
可以找字串內的東西,sub是欲搜尋的字串,start是起始值,預設是0,end是終止值
會回傳一個整數,也就是sub在字串的位置,當找不到,會有回傳值-1
範例
n=input()   #使用者可輸入的目標字串
m=input()  #使用者欲搜尋的目標
pos=n.find(m)  #pos帶指m在n中的位置,此時pos輸出的內容是int (整數)
while pos!=-1:
print(pos)
pos=n.find(m,pos+1)  # pos輸出不是-1(找不到),會再度進到while尋找下個m出現的位置
                                    #pos+1其實就是find(sub[, start[, end]]) 中 start 的位置

來看看輸出的結果

所以就能利用while的特性 從一列字串中找到"i"的位置 (空白也列入字串,首字位置為0)
附上另一種用for的寫法
m=input()   
pos=n.find(m)
for i in n:
   if pos !=-1:
        print(pos)
        pos=n.find(m,pos+1)  #讓find去找下一個
        continue                  #讓for 可以在做一次,直到回傳-1,做法其實跟找質數類似

以下是找質數的寫法,給大家複習 參考

str.replace(old, new[,count])
用法如同字面就是取代,old會被取代成new,count是要取代幾次,沒有設定就是全部取代
以程式作為示範
n=input("隨意輸入一段文字內容:")
tab=n.replace('a','A').replace('b','B').replace('c','C')
print(tab)

來看看輸出的結果 (可以跟後面提到的translate進行比較)
本來小寫的abc都變成大寫了

接著介紹用法跟replace很像的兄弟
str.maketrans(from, to)
這是弟弟,主要會變成map的形式,把from變成to,只能用str表示,不能用list 或[ ] { }
(我不確定有沒有maketrans單獨的使用方法,所以就沒提了)

string.translate(map)
這是哥哥,會把使用者輸入或是程式中指定的字串,以弟弟map給的參考資料,進行翻譯以程式做示範
n= input("隨意輸入一段文字內容:")
a='abc'
b='123'
tab=str.maketrans(a,b)
print(n.translate(tab))
來看看輸出的結果
a被換成1,b被換成2,c被換成3

str.center(width)
width是長度,如果是奇數可以輕鬆對齊,如果是偶數就會先靠右(左邊多一格)
其實跟%後面加數字的對齊法概念類似,如果要靠左或靠右,請用str.ljust() 或 srt.rjust()

str.upper()
將小寫轉大寫(只適用英文),括號內不用填東西

str.lower()
大寫轉小寫,其他同上,通常用於身分證(開頭有人會打成小寫,可以幫忙做轉換)

str.title()
英文單字首字大寫轉小寫,但是不能區分is the for of 這種不用轉大寫的

str.capitalize()
只有str中第一個字改成大寫,其他同上

最後是
str.is系列
由於這個系列屬於判斷類型(只能判斷字串str),只會回傳False或True
所以就簡單的全部整理在這邊
str.isdigit()   輸入的字串 是否都為數字(str的形式)
str.isalpha() 輸入的字串 是否都為字母
str.isupper() 輸入的字串 是否都為大寫字母
str.islower() 輸入的字串 是否都為小寫字母
str.isspace() 輸入的字串 是否都為大寫字母
str.istitle()  輸入的字串 是否每個個別單字開頭都為大寫字母

輸入與輸出的範例



小記
這篇打起來真的是多災多難,先是覺得篇幅太長,所以跟上篇分開,所以調整了篇幅跟內容(以及第四篇的排版),然後結果巴哈沒存檔到,文檔全部不見,所以又重打一次(要養成存檔好習慣)
然後手機板不能用新版的發表(會跑成原始碼的狀態)
所以我又整理了一次(花了三十幾分鐘ww)
送禮物贊助創作者 !
0
留言

創作回應

更多創作