您的代码存在几个问题:
首先,return
语句放错了位置。它应该在for循环外面而不是里面。
接下来,在以下片段中:
for i in range(len(str)):
n=str[i]
newStr=str.replace(n, "*")
你传递给函数的第二个参数n
在每次循环步骤中都被覆盖。因此,如果你的初始字符串是"abcabcabcd",并且你将n=3(一个数字)作为第二个参数传递,那么你的循环所做的是:
n="a"
n="b"
n="c"
...
因此,数值3从未被使用。另外,在您的循环中,只有字符串中最后一个替换被保存:
n="a"
newStr="abcabcabcd".replace("a", "*") --> newStr = "*bc*bc*bcd"
n="b"
newStr="abcabcabcd".replace("b", "*") --> newStr = "a*ca*ca*cd"
...
n="d"
newStr="abcabcabcd".replace("d", "*") --> newStr = "abcabcabc*"
如果你修复了
return
的位置,并使用一些字符串测试你的函数,它似乎可以正常工作:
In [7]: replaceN("abcabcabc", 3)
Out[7]: 'ab*ab*ab*'
但如果您更加慎重地做出选择:
In [10]: replaceN("abcabcabcd", 3)
Out[10]: 'abcabcabc*'
如果代码失败并且只替换字符串的最后一个字符,则很明显它是无效的。
my_string.replace(my_string[-1], "*")
Eric给出的代码运行良好:
In [16]: ''.join("*" if i % 3 == 0 else char for i, char in enumerate("abcabcabcd"))
Out[16]: '*bc*bc*bc*'
它替换第3、6、9等位置。如果您不想替换位置0,可能需要进行一些调整。
replaceN("hello world", 3)
应该返回*el*o *or*d
吗? - Eric