1. 程式人生 > >20190112-自定義實現字串的操作方法,如strip,upper,title,ljust,center,zfill,find,rfind等

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))