#实现replace 这个写法有点问题 只能替换一次 在my_replace中进行简单修改即可#第一步实现find字符串defmy_find(source,target,start=0):ifnot source ornot target:return-1iflen(target)>len(source):return-1for index inrange(start,len(source)-len(target)+1):
t_index =0while t_index <len(target):if target[t_index]== source[t_index+index]:
t_index +=1else:breakif t_index ==len(target):return index
return-1#第二步实现replace字符串defmy_replace(source,oldsub,newsub):
index = my_find(source,oldsub)
front_source = source[:index]
back_source = source[index+len(oldsub):]return front_source + newsub + back_source
if __name__ =="__main__":print(my_replace("this is a book","this","it"))print(my_replace("this is a this book","this","it"))
上面的写法只能替换一次,下面这个实现完整功能
### 参考了python训练130道题#答案defmy_replace(source,oldsub,newsub):ifnot source ornot oldsub:return source
new_string =""
start_index =0
index = my_find(source,oldsub,start = start_index)while index !=-1:#my_find返回的-1 以-1为标识循环去找
new_string += source[start_index:index]+ newsub #前办部分加上newsub
start_index = index+len(oldsub)
index = my_find(source,oldsub,start = start_index)
new_string += source[start_index:]#形成完成的替换的字符串return new_string
defmy_find(source,target,start=0):ifnot source ornot target:return-1if start <0or start >=len(source):return-1iflen(target)>len(source):return-1for index inrange(start,len(source)-len(target)+1):
t_index =0while t_index <len(target):if target[t_index]== source[t_index+index]:
t_index +=1else:breakif t_index ==len(target):return index
return-1if __name__ =="__main__":print(my_replace("this is a book","this","it"))print(my_replace("this is a this book","this","it"))print(my_replace("this is a this bookthis","t2his","it"))