如何调整以下函数,以便如果分配给st1的变量在字符串中根本不出现(1不出现在字符串中,字符串为*********)
,则函数只返回字符串(*********)
但是如果字符串确实包含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"))
答案 0 :(得分:1)
def replacest1(string, st1, st2):
return string.replace(st1, st2)
测试:
replacest1("abcdefdcba", "c", "x")
结果:
"abxdefdxba"
测试:
replacest1("yyyyzzzz", "c", "x")
结果:
"yyyyzzzz"
或者好得多:
"abcdefdcba".replace("c", "x")
请注意,上面定义的功能与问题所要求的功能是1:1的对应关系。使用string
作为标识符是不的好习惯。我强烈建议不使用此类标识符。
注意:由于string.replace()
在弃用时仍然存在,因此可以完全取消此类函数的定义,上述解决方案仍将包含问题中使用的标识符string
。如果函数无法消除,我会在这里使用不同的标识符,但是根本不需要定义自己的函数我现在让这个标识符就像现在一样。
以下是如何在不使用string.replace()
的情况下实现该功能的变体:
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
注意:我更喜欢使用断言来检测编程错误。如果性能在您的用例中不是一个大问题,这些断言不会造成任何麻烦,但可以防止意外滥用这样的函数:如果您不小心传递了错误的参数,断言将会失败并立即给您反馈。