python(day019——字符串练习)

1.实现lower函数

import string
def lower_word(a):
    if not isinstance(a,str):
        return None
    result=""
    for i in a:
        if i in string.ascii_uppercase:
            result+=chr(ord(i)+32)
            #result+=i.lower()
        else:
            result+=i
    return result

print(lower_word("Hello WORLD"))

2.实现upper函数

import string
def upper_word(a):
    if not isinstance(a,str):
        return None
    result=""
    for i in a:
        #if i in string.ascii_lowercase:
        if i<="z" and i>="a":
            result+=chr(ord(i)-32)
        else:
            result+=i
    return result

print(upper_word("Hello WORLD"))

3.实现find函数,返回所有位置

def find(a,dest_str):
    "找到所有dest_str并返回位置"
    if not isinstance(a,str) or not isinstance(dest_str,str):
        return None
    flag=0
    result=[] #储存dest_str位置
    while flag<len(a):
        if a[flag:(flag+len(dest_str))]==dest_str :
            result.append(flag)
            flag+=len(dest_str)
        else:
            flag+=1
    return result

print(find("hello world ll","ll"))
#结果:[2, 12]

4.实现strip函数

def strip(s,del_str=" \r\n\r\n"):
    if not isinstance(s,str):
        return None
    result=""
    flag1=0
    while 1:
        if s[flag1:flag1+len(del_str)]==del_str:
            result=s[flag1+len(del_str):]
            flag1+=len(del_str)
        else:
            break
    if result=="":
        result=s
    else:
        s = result

    flag2=0

    while 1:
        if s[len(s)-flag2-len(del_str):len(s)-flag2:]==del_str:
            result = s[:len(s)-flag2-len(del_str)]
            flag2 += len(del_str)
        else:
            break
    return result


print("1",strip("     hello    "))
print("2",strip("**hello***","*"),)
print("3",strip("      hello***","*"))
print("3",strip("**    hello%#$  ","*"))
print("1",strip("     hello    ","\n"))

#缺陷:默认值
def strip(s,del_str=" \r\n\t"):
    """
    算法:
    1 声明一个result的str变量为空字符串
    2 声明一个left的变量为0
    3 正序遍历s,判断前面的元素是否属于del_str中的一个,如果是什么都不做
             如果不是把这个坐标赋值给left
    4 声明一个right的变量为-1
    5 倒序遍历s,判断后面的元素是否属于del_str中的一个,如果是什么都不做
             如果不是把这个坐标赋值给right
    6 return s[left:right+1]

    """
    left=0
    right=-1
    for i in range(len(s)):
        if s[i] not in del_str:
            left=i
            break

    for i in range(-1,-len(s)-1,-1):
        if s[i] not in del_str:
            right=i
            break
    if right==-1: 
        right=len(s)
    return s[left:right+1]

print("1",strip("     hello    "))
print("2",strip("**hello***","*"),)
print("3",strip("      hello***","*"))
print("4",strip("**    hello","*"))
print("5",strip("**    hello%#$  ","*"))

5.实现swapcase函数:

def swapcase(s):
    if not isinstance(s,str):
        return None
    result=""
    for i in s:
        if "A"<=i<="Z":
            result+=chr(ord(i)+32)
        elif "a"<=i<="z":
            result+=chr(ord(i)-32)
        else:
            result+=i
    return result

print(swapcase("Hello WORld"))

6.实现capitalize函数:

def capitalize(s):
    """
    capitalize函数计算的结果首字母大写,后面的字母如果是大写则转为小写
    """
    if not isinstance(s[0],str):
        return None
    l=s.replace(s[0],s[0].upper())
    result=l[0]
    for i in l[1:]:
        result+=i.lower()

    return result

print(capitalize("hELLO"))

7.实现replace函数

def replace(s,source_str,dest_str,times):
    """
    算法:
    用split,把source_str切掉,用dest_str再join
    """
    if not isinstance(s,str):
        return None
    l=[]
    result=""
    l=s.split(source_str,times)
    result=dest_str.join(l)
    return result


print(replace("hello","l","pp",1))
#结果:hepplo
def replace(s,source_str,dest_str,times):
    """
    1 定义一个result字符串变量
    2 对应一个postion的列表变量,存放所有要替换字符串的起始位置
    3 找到s中所有的source_str所在的坐标起始位置,放到position
    4 用while基于位置做遍历,如果坐标是source_str所在的坐标起始位置,
      则直接拼接dest_str,跳过source_str长度的坐标位置,继续遍历
      如果不是起始位置,则直接拼接到result中。
    5 返回执行结果
    """
    if not isinstance(s,str) or not isinstance(source_str,str) or not isinstance(dest_str,str):
        return None
    result=""
    position=[]
    dest_len=len(source_str)
    i=0
    while i<len(s):
        if s[i:i+dest_len]==source_str:
            position.append(i)
            i+=dest_len
        else:
            i+=1
    #找到要替换词所在位置
    print(position)

    i=0
    flag=0
    while i < len(s):  #替换操作
        if flag<times:
            if i in position:
                result+=dest_str
                i+=len(source_str)
                flag+=1
            else:
                result += s[i]
                i += 1
        else:
            result += s[i]
            i += 1
    return result

print(replace("hellol","l","pp",2))



8.综合练习

#输入一组数字,每个数字加1输出
num=input("请输入一组数字:")
l=list(num)
l1=[]
for i in l:
    l1.append(str(int(i)+1))
print(l1)
print(int("".join(l1)))


#输入一组数字,每个数字加1输出
num=input("请输入一组数字:")
l=list(num)
l1=[]
for i in l:
    l1.append(str(int(i)+1))
print(l1)
print(int("".join(l1)))

#输入一组数字,每个数字加1输出
num=input("请输入一组数字:")
length=len(num)
num=int(num)+int(length*"1")
print(num)

#生成五个1:11111
result=0
for i in range(5):
    result+=pow(10,i)
print(result)

#生成五个1:11111
result=1
for i in range(4):
    result=result*10+1
    print(result)
print(result)
#删除字符串中的小写字母
s="abcABCDJE@*$@etCMDejf!"
new_s=""
for i in s:
    if i>="a" and i<="z":
        pass
    else:
        new_s+=i
print(new_s)

#统计list有多少不同类的数据,并生成字典展示
a=[1,1.1,[2,3],"e",2.2,2,{1:2},[1,2,3],"stt"]
result={}
for i in a:
    flag=str(type(i))[8:-2]
    if flag in result.keys():
        result[flag]+=1
    else:
        result[flag]=1

print(result)

#方法二:
a=[1,1.1,[2,3],"e",2.2,2,{1:2},[1,2,3],"stt"]
def list_type(l):
    d={}
    for i in l:
        d[str(type(i))]=d.get(str(type(i)),0)+1
        #Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。
    return d
print(list_type(a))
#翻转字符串
>>> a="helloworld"
>>> a[-1::-1]
'dlrowolleh'
>>> "".join(reversed(list(a)))
'dlrowolleh'
>>> from functools import reduce
>>> result = reduce(lambda x,y:y+x,a)
>>> result
'dlrowolleh'

引用:https://www.cnblogs.com/taceywong/p/8045127.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值