Python:替换字符串中的字符

Python:替换字符串中的字符,python,Python,我如何调整以下函数,以便在分配给st1的变量根本不出现在string中时(1不出现在string中,并且字符串是**********),该函数只返回字符串(**********)),但如果字符串确实包含1,则按如下所述将每个1替换为2。谢谢你的帮助 def replacest1(string,st1,st2): for i in string: if i == st1: N_W = string.replace(st1 , st2) return N_W

我如何调整以下函数,以便在分配给st1的变量根本不出现在string中时(1不出现在string中,并且字符串是
**********)
,该函数只返回字符串
(**********)
),但如果字符串确实包含1,则按如下所述将每个1替换为2。谢谢你的帮助

def replacest1(string,st1,st2):
for i in string:
    if i == st1:
        N_W = string.replace(st1 , st2)
        return N_W
        print(replacest1("***1***1***","1","2"))
测试:

结果:

"abxdefdxba"
"yyyyzzzz"
测试:

结果:

"abxdefdxba"
"yyyyzzzz"

或者更好:

"abcdefdcba".replace("c", "x")
请注意,上面定义的函数与问题要求的函数是1:1对应关系。使用
string
作为标识符是而不是的好做法。我强烈建议不要使用此类标识符


注意:由于此类函数的定义可以完全取消,因为
string.replace()
仍然存在,尽管它已被弃用,上述解决方案仍将包含问题中使用的标识符
string
。如果函数不能被消除,我会在这里使用不同的标识符,但是因为定义自己的函数根本没有必要,所以我现在就让这个标识符保持原样


下面是如何在不使用
string.replace()
的情况下实现该功能的一个变体:


注意:我更喜欢使用断言来检测编程错误。如果性能在您的用例中不是一个大问题,那么这些断言不会造成任何问题,但可以防止意外误用这样的函数:如果您意外地传递了错误的参数,那么断言将失败并立即向您提供反馈。

我不确定您是否需要函数。给定三个字符串,
foo
tok
rep
,只需使用
foo即可。replace(tok,rep)
将返回
foo
,并将
tok
的所有实例替换为
rep
。如果
foo
不包含
tok
的实例,它将只返回原始字符串
foo
。此外,我认为for循环是不必要的(可能给您带来了最大的麻烦)。如果字符串不包含st1,我们只返回string.BTW,
string
不是变量名的好选择:它是标准模块的名称。@PM2Ring:是的,我正要这么说。不要这样选择标识符,这一点非常重要。您是否可以将
字符串
参数重命名为
源字符串
?我真的以为你一开始是在调用不推荐的函数。是的,你是对的。我正在使用不推荐使用的字符串替换。它仍然存在,尽管它似乎不再被记录。我会再次更新答案。现在应该更好了。
"abcdefdcba".replace("c", "x")
def replaceCharacters(inputString, findChar, replaceChar):
    assert isinstance(inputString, str)
    assert isinstance(findChar, str)
    assert len(findChar) == 1
    assert isinstance(replaceChar, str)
    assert len(replaceChar) == 1

    buffer = ""
    for c in inputString:
        buffer += replaceChar if c == findChar else c
    return buffer