20190112-自定義實現字串的操作方法,如strip,upper,title,ljust,center,zfill,find,rfind等
1:自定義實現strip()
Python strip() 方法用於移除字串頭尾指定的字元(預設為空格或換行符)或字元序列
演算法:strip()僅移除首尾的指定字元,不能移除中間的先從首部開始移除
def customerize_strip(s,value=' '):
result =''
front =0
end = len(s)
#step1:找到首部順序開始一個非指定字元的index
for i in range(len(s)):
if s[i] == value:
continue
else :
front =i
break
#step2:找到尾部倒序開始第一個非指定字元的index
for j in range(len(s)-1,-1,-1):
#range是一個開區間,所有第一個值為len(s)-1,第二個值寫作-1,表示取到第0位
if s[j]==value:
continue
else:
end = j
break
for k in range(front,end+1):
result +=s[k]
return result
print(s)
print(customerize_strip(s))
2:自定義實現str.upper()
演算法,需要考慮字串中不僅包含字母,可能還有其他字元的情況
def customerize_upper(s):
result=''
import string
for i in s:
if i in string.ascii_lowercase:
result+=chr(ord(i)-32)
else:
result+=i
return result
print(customerize_upper(s))
3.自定義實現str.lower()
演算法,需要考慮字串中不僅包含字母,可能還有其他字元的情況
def customerize_lower(s):
result=''
import string
for i in s:
if i in string.ascii_uppercase:
result+=chr(ord(i)+32)
else:
result+=i
return result
print(customerize_lower(s))
4.自定義實現str.swapcase()
Python swapcase() 方法用於對字串的大小寫字母進行轉換
def customerize_swapcase(s):
result =''
import string
for i in s:
if i in string.ascii_uppercase:
result+=chr(ord(i)+32)
elif i in string.ascii_lowercase:
result+=chr(ord(i)-32)
else:
result+=i
return result
print(customerize_swapcase(s))
5.自定義實現str. capitalize()
Python capitalize()將字串的第一個字母變成大寫,其他字母變小寫
def customerize_capitalize(s):
result =''
import string
for i in range(len(s)):
if i==0 and s[i] in string.ascii_lowercase:
result+=chr(ord(s[i])-32)
elif s[i] in string.ascii_uppercase:
result+=chr(ord(s[i])+32)
else:
result+=s[i]
return result
print(customerize_capitalize(s))
6.自定義實現str.title()
Python title() 方法返回"標題化"的字串,就是說所有單詞都是以大寫開始,其餘字母均為小寫
def customerize_title(s):
result =[]
s= s.split()
import string
for i in s:
each =''
for j in range(len(i)):
if j==0 and i[j] in string.ascii_lowercase:
each += chr(ord(i[j])-32)
else:
each += i[j]
result.append(each)
return ' '.join(result)
s1= 'I am a good girl ha ha'
print(customerize_title(s1))
7.自定義實現str.ljust(numbe)
Python ljust() 方法返回一個原字串左對齊,並使用空格填充至指定長度的新字串。如果指定的長度小於原字串的長度則返回原字串
def customerize_ljust(s,lenth,fillchar=' '):
if lenth<=len(s):
return s
else:
fill =''
for i in range(lenth-len(s)):
fill+=fillchar
result =s+fill
return result
print(customerize_ljust(s1,23,'*'))
print(len(s1))
print(len(customerize_ljust(s1,23,'*')))
8.自定義實現str.center(numbe)
center() 方法返回一個指定的寬度 width 居中的字串,fillchar 為填充的字元,預設為空格。如果指定的長度小於原字串的長度則返回原字串。
def customerize_center(s,lenth,fillchar=' '):
if len(s)>lenth:
return s
else:
result=''
front_period=int((lenth-len(s))/2)
end_period = lenth-front_period-len(s)
for i in range(lenth):
if i<front_period:
result+=fillchar
elif i>=front_period and i<lenth-end_period:
result+=s[i-front_period]
else:
result+=fillchar
return result
s2='aaa'
print(s2)
print(customerize_center(s2,7,'*'))
8.自定義實現zfill
Python zfill() 方法返回指定長度的字串,原字串右對齊,前面填充0
def customerize_zfill(s,lenth):
if len(s)>lenth:
return s
else:
result=''
for i in range(lenth):
if i<lenth-len(s):
result+=str(0)
else:
result+=s[i-(lenth-len(s))]
return result
print(customerize_zfill(s2,10))
9.自定義find函式
Python find() 方法檢測字串中是否包含子字串 str ,如果指定 beg(開始) 和 end(結束) 範圍,則檢查是否包含在指定範圍內,如果包含子字串返回開始的索引值,否則返回-1
def customerize_find(s,str,beg=None,end = None):
if beg == None:
beg = 0
if end ==None:
end = len(s)
for i in range(beg,end):
if s[i:i+len(str)]==str:
return i
else:
return -1
s3='lkadsacedsfhlkwheldsfsdfskadsface'
print(s3)
print(customerize_find(s3,'ace'))
print(customerize_find(s3,'ace',9))
10.自定義實現rfind
Python rfind() 返回字串最後一次出現的位置(從右向左查詢),如果沒有匹配項則返回-1
def customerize_rfind(s,str,beg=None,end=None):
if beg == None:
beg = 0
if end ==None:
end = len(s)
for i in range(end,beg-1,-1):
if s[i-len(str):i]==str:
if i-len(str)>=beg:
return i-len(str)
else:
return -1
print(s3)
print(customerize_rfind(s3,'ace'))
print(customerize_rfind(s3,'ace',3,8))