字符串学习笔记1

这篇博客通过一系列小练习详细介绍了Python中字符串的替换、加密解密、字符统计及定位等操作。包括使用不同方法替换字符串中的特定字符,对字符串进行加密解密,统计首字母为'a'的单词,倒序输出句子,查找字符位置,以及运用内置函数如find、index、count、split等进行字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小练习:
将字符串s = “abc"中的"b"替换成"1”。
方法1:

s = "abc"
letter_list = list(s)
letter_list[1] = "1"
print("".join(letter_list))

在这里插入图片描述
方法2:

s = "abc"
s = s.replace("b","1")
print(s)

在这里插入图片描述
方法3:

s = "abc"
s = s.split("b")
print("1".join(s))

在这里插入图片描述
方法4:字符串拼接

s = "abc"
print(s[0]+"1"+s[-1])

在这里插入图片描述
方法5:正则表达式

import re
s = "abc"
print(re.sub(r'b','1',s))

在这里插入图片描述
练习1:
将"gloryroad"按照如下规则进行加密:
字母对应的asscii码值进行加密,并且在码值前面加上码值长度,如g对应的码值为ord(“g”)=103,则字母g加密结果为3103,3是asscci的长度。
"gloryroad"正确输出加密结果为:
“31033108311131143121311431112973100”

def encode_str(s):
    encoded_str = ""
    for i in s:
        encoded_str+=str(len(str(ord(i))))+str(ord(i))
    return encoded_str

print(encode_str("gloryroad"))

在这里插入图片描述
练习2:
将上题中的加密字符串进行解密
方法1:用while循环,观察加密后的规律,想办法遍历所有的内容

def decode_str(s):
    index = 0  #每个字母的asscci码的长度
    decoded_str = ""
    while index < len(s):
        decoded_str += chr(int(s[(index+1):(index+int(s[index])+1)]))
        index = index+int(s[index])+1
    return decoded_str

print(decode_str("31033108311131143121311431112973100"
))

在这里插入图片描述
方法2:递归实现

decrypt_result = ""
def get_data(data):
    global decrypt_result
    if len(data)==0:
        print("解密结果为:"+decrypt_result)
    else:
        num=int(data[0])
        decrypt_result+=chr(int(data[1:(num+1)]))
        get_data(data[(num+1):])

print(decode_str("31033108311131143121311431112973100"
))

在这里插入图片描述
小练习:
s = “I am a boy!”
统计一下首字母为"a"的单词

s = "I am a boy!"
result= 0
for word in s.split():
    if word[0]=="a":
        result+=1

print(result)

在这里插入图片描述
将句子倒着输出。

s = "I am a boy!"
result = []
for word in s.split()[::-1]:
    result.append(word[::-1])

print(" ".join(result))

在这里插入图片描述
小练习:
在字符串中查找某个字符的位置
方法1:

result = []
s="abbaaaba"
for i in range(len(s)):
    if s[i:i+2] == "ab":
        result.append(i)

print(result)

在这里插入图片描述
方法2:

result = []
s="abbaaaba"
index = 0
while 1:
    position = s.find("ab",index)
    if position != -1:
        result.append(position)
        index = position+1
    else:
        break

print(result)

在这里插入图片描述
join内置函数的实现:

def join(arr,s):
    result = ""
    for i in arr:
        result += str(i)+s
    return result.rstrip(s)

print(join([1,2,3],"*"))

在这里插入图片描述
小练习:
判断一下这句话有几个数字和几个空白,几个字母,其他字符有几个。
“I am a 12 years old boy! hi,me!”

s = "I am a 12 years old boy! hi,me!"
number_num = 0
letter_num = 0
space_num = 0
other_letter_num = 0
for i in s:
    if i.isalpha():
        letter_num+=1
    elif i.isdigit():
        number_num+=1
    elif i.isspace():
        space_num+=1
    else:
        other_letter_num+=1

print(number_num)
print(letter_num)
print(space_num)
print(other_letter_num)

在这里插入图片描述
find内置函数的实现:

def find(s,target_str,start_position=0,end_position=None):
    if end_position is None:
        end_position = len(s)
    for i in range(start_position,end_position):
        if s[i:i+len(target_str)] == target_str:
            return i
    return -1

print(find("abc","x"))
print(find("abc","bc"))
print(find("abc","bcx"))
print(find("abc","bc",1))
print(find("abc","bc",2))
print(find("abc","bc",1,3))

在这里插入图片描述
index内置函数的实现:

def index(s,target_str,start_position=0,end_position=None):
    if end_position is None:
        end_position = len(s)
    for i in range(start_position,end_position):
        if s[i:i+len(target_str)] == target_str:
            return i
    raise ValueError("substring not found")

print(index("abc","x"))
print(index("abc","bc"))
print(index("abc","bc",1))
print(index("abc","bc",2))
print(index("abc","bc",1,3))

在这里插入图片描述
count内置函数的实现:

def count(s,target_str,start_position=0,end_position=None):
    index = start_position
    if end_position is None:
        end_position = len(s)
    times = 0
    while index < end_position-1:
        if s[index:index+len(target_str)] == target_str:
            times+=1
            index+=len(target_str)
        else:
            index+=1
    return times

print(count("abcab","ab"))
print(count("abcab","ab",3,5))
print(count("abc3ab","ab",4,8))
print(count("ababababab","ab",3,7))

在这里插入图片描述
find_all内置函数的实现:

def find_all(s,target_str):
    result = []
    index = 0
    while index < len(s):
        if s[index:].find(target_str)!=-1:
            result.append(index+s[index:].find(target_str))
            index+=s[index:].find(target_str)+len(target_str)
        else:
            break
    return result

print(find_all("1ab324ab3ab","ab"))

在这里插入图片描述
split内置函数的实现:

def split(s,split_str=None,times=None):
    result = []
    positions = find_all(s,split_str)
    print(positions)
    for i in range(len(positions)):
        print(positions[i])
        if i == 0:  #分隔符的位置是第一个值
            print("0:",positions[i])
            result.append(s[:positions[i]])  #第一个分隔符前面的所有值取到了
            if len(positions)==1:
                result.append(s[positions[i]+len(split_str):])
            if len(positions)>=2:
                result.append(s[positions[i]+len(split_str):positions[i+1]])
        elif i == len(positions)-1:  #分隔符的位置是最后一个值
            print("1:",positions[i])
            result.append(s[positions[i]+len(split_str):])
        else:  #分隔符的位置是中间的值
            print("2:",positions[i])
            result.append(s[positions[i]+len(split_str):positions[i+1]])
    return result

print(split("ab**ba**cd**de**ef","**"))
print(split("ab**ba**cd**de**ef","*"))   
print(split("ab***ba","**"))

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值