自定义实现字符串中某些函数内部逻辑

  • 自定义实现find()函数:在字符串中查找指定字符串
方法一:
def find_str1(s,dest_str):
    if not isinstance(s,str):
        return "函数中传入的参数%s不是字符串!" %s
    elif not isinstance(dest_str,str):
        return "函数中传入的参数%s不是字符串!" %dest_str
    elif dest_str not in s:
        return "函数中传入的字符串%s不在字符串%s中!" %(dest_str,s)
    result1=[]
    for i in range(len(s)):
        if s[i:i+len(dest_str)]==dest_str:
            result1.append((i,i+len(dest_str)))
    return result1            
print(find_str1("abc 123-abc","abc"))    #执行结果:[(0, 3), (8, 11)]

方法二:
def find_str2(s,dest_str):
    if not isinstance(s,str) or not isinstance(dest_str,str):
        return "函数中传入的参数不是字符串!" 
    elif dest_str not in s:
        return "函数中传入的字符串%s不在字符串%s中!" %(dest_str,s)
    result2=[]
    start=0
    while start<len(s):
        if s[start:start+len(dest_str)]==dest_str:
            result2.append((start,start+len(dest_str)))
            start+=len(dest_str)
        else:
            start+=1
    return result2
print(find_str2("abc 123-abc","abc"))    #执行结果:[(0, 3), (8, 11)]
  • 自定义实现strip()函数:去掉字符串左右空白
方法一:先判断左边的第一个非空白元素,从左边切片取非空白的元素组成新字符串;再从新字符串中判断右边的第一个非空白元素,从新字符串中右边切片取非空白的元素
def custom_strip1(s,del_str="\n \n\r\t\f"):
    if not isinstance(s,str):
        return "函数中传入的参数不是字符串!"
    result1=""
    result2=""
    for i in range(len(s)):
        if s[i] not in del_str:          
            result1=s[i::]
            break
    #print("result1=%s" %result1)
    #print(len(result1))
    for j in range(-1,-len(result1)-1,-1):
        if result1[j] not in del_str:  
            #print(j)
            result2=result1[:len(result1)+j+1:]
            break
    return result2    
print(custom_strip1("\n abc abc\n\r\t"))   #执行结果:abc abc

方法二:先判断s中左边的第一个非空白元素,记录为初始位置;再判断s中右边的第一个非空白元素,记录为末位置
def custom_strip2(s,del_str="\n \n\r\t\f"):
    if not isinstance(s,str):
        return "函数中传入的参数不是字符串!"
    start=0
    end=-1
    for i in range(len(s)):    #左边正着来
        if s[i] not in del_str:          
            start=i
            break
    for j in range(-1,-len(s)-1,-1):
        if s[j] not in del_str:
            end=len(s)+j+1     #或者写成end=j+1(取的是负值坐标)
            break
    return s[start:end]
print(custom_strip2("\n abc abc\n\r\t"))  #执行结果:abc abc
  • 自定义实现lower()函数:将字符串中所有的字母转换成小写
def custom_lower(s):
    if not isinstance(s,str):
        return "函数中传入的参数不是字符串!"
    result=""
    for i in s:
        if i>="A" and i<="Z":
            result+=chr(ord(i)+32)
        else:
            result+=i
    return result
print(custom_lower("Hello,World!你好123"))   #执行结果:hello,world!你好123
  • 自定义实现upper()函数:将字符串中所有的字母转换成大写
def custom_upper(s):
    if not isinstance(s,str):
        return "函数中传入的参数不是字符串!"
    result=""
    for i in s:
        if i>="a" and i<="z":
            result+=chr(ord(i)-32)
        else:
            result+=i
    return result
print(custom_upper("Hello,World!你好123"))   #执行结果:HELLO,WORLD!你好123
  • 自定义实现swapcase()函数:大小写互换
def custom_swapcase(s):
    if not isinstance(s,str):
        return "函数中传入的参数不是字符串!"
    result=""
    for i in s:
        if i>="a" and i<="z":
            result+=chr(ord(i)-32)
        elif i>="A" and i<="Z":
            result+=chr(ord(i)+32)
        else:
            result+=i
    return result
print(custom_swapcase("Hello,World!你好123"))#执行结果:hELLO,wORLD!你好123
  • 自定义实现capitalize()函数:只有第一个字母转换成大写,其他全部转换成小写
def custom_capitalize(s):
    if not isinstance(s,str):
        return "函数中传入的参数不是字符串!"
    result=""
    first=1
    #找第一个字母的坐标
    for i in range(len(s)):
        if s[i]>="a" and s[i]<="z":
            result+=chr(ord(s[i])-32)
            first=i
            break
        elif s[i]>="A" and s[i]<="Z":
            result+=s[i]
            first=i
            break
        else:
            result+=s[i]
    #第一个字母往后的字母都转换成小写
    for j in range(first+1,len(s)):
        if s[j]>="A" and s[j]<="Z":
            result+=chr(ord(s[j])+32)
        else:
            result+=s[j]
    return result
print(custom_capitalize("你好123Hello,WORLD!"))  #执行结果:你好123Hello,world!
  • 自定义实现replace(s,s1,s2)函数:将s中的s1替换成s2
方法一:
def custom_replace1(s,s1,s2):
    if not isinstance(s,str):
        return "函数中传入的参数%s不是字符串!" %s
    elif not isinstance(s,str):
        return "函数中传入的参数%s不是字符串!" %s1
    elif not isinstance(s,str):
        return "函数中传入的参数%s不是字符串!" %s2
    elif s1 not in s:
        return "函数中传入的参数%s不在字符串%s中!" %(s1,s)
    result=""
    start=0
    while start<len(s):
        if s[start:start+len(s1):]==s1:
            result+=s2
            start=start+len(s1)                       
        else:
            result+=s[start]
            start+=1          
    return result
print(custom_replace1("abc123abc","abc","**"))    #执行结果:**123**

方法二:使用s1作为分割符,s2作为连接符
def custom_replace2(s,s1,s2):
    if not isinstance(s,str) or not isinstance(s1,str) or not isinstance(s2,str):
        return "函数中传入的参数不是字符串!"
    elif s1 not in s:
        return "函数中传入的参数%s不在字符串%s中!" %(s1,s)
    s_list=s.split(s1)
    return s2.join(s_list)
print(custom_replace2("abc123abc","abc","**"))    #执行结果:**123**
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值