我编写了一个python函数replace_str,它消耗了3个非空字符串,base,target和rep。
第一个字符串base表示要更新的基本字符串。第二个字符串target表示要替换的目标字符串,第三个字符串rep表示将替换更新后的字符串中的目标的字符串。
该函数生成一个新字符串,其中目标字符串由基本字符串中的rep字符串替换,但如果满足以下任一条件,则生成相同的基本字符串。
•如果在基本字符串中找不到目标字符串,或
•如果目标和代表是相同的字符串。
不允许使用字符串方法replace和find
这是我到目前为止所做的:
def replace_str(base, target, rep):
m = 0
n = len(target)
if base[m:n] == target:
new_base = base[0:m] + rep + base[n:]
return replace_str(new_base, target, rep)
else:
m = m + 1
n = n + 1
return replace_str(base, target, rep)
我测试程序时出现最大递归深度错误。我正在尝试各种基本情况,因为我的功能卡住了,但我试过的所有基本情况都给了我''''或者基地的最后一个字母
replace_str("aaaax","aa","x")
应生成'aax'
,但会给我一个错误。
replace_str("aa", "aa", "x")
给了我'x'
的正确结果。
此外,这篇文章并不是另一篇文章的副本。链接帖子的程序完全不同,有不同的问题。我的基本情况有问题。
答案 0 :(得分:0)
在else
分支机构中,您更新了m
和n
,但是您无法将这些值传递给下一次调用replace_str
,这最终会从开始。
您需要添加m
和n
作为参数,或者将函数的该部分转换为循环。
使用额外的参数更容易,看起来像这样:
# adding m and n as arguments
def replace_str(base, target, rep, m=0, n=None):
if n is None:
n = len(target)
...
你还需要一个基本案例,其中最简单的可能是:
# adding m and n as arguments
def replace_str(base, target, rep, m=0, n=None):
if target not in base:
return base
if n is None:
n = len(target)
...