小练习:
将字符串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","**"))