我试图在迭代字符串时替换 Python 中的一个字符,但它不起作用

-3 python string loops for-loop python-2.7

这是我目前拥有的代码:

letter = raw_input("Replace letter?")
traversed = raw_input("Traverse in?")
replacewith = raw_input("Replace with?")
traverseint = 0
for i in traversed:
    traverseint = traverseint + 1
    if i == letter:
        traversed[traverseint] = replacewith
        print i
print(traversed)
Run Code Online (Sandbox Code Playgroud)

Moi*_*dri 5

str在python中本质上是不可变的。这意味着,您不能修改现有对象。例如:

>>> 'HEllo'[3] = 'o'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)

为了替换字符串中的字符,理想的方法是使用str.replace()方法。例如:

>>> 'HEllo'.replace('l', 'o')
'HEooo'
Run Code Online (Sandbox Code Playgroud)

不使用str.replace(),您可以通过使用临时字符串来运行您的程序:

my_str = ''  # Temporary string

for i in traversed:
    # traverseint = traverseint + 1      # Not required
    if i == letter:
        i = replacewith
    my_str += i 
Run Code Online (Sandbox Code Playgroud)

此处my_str将保存已转换的值traversed。或者,更好的方法是将字符串转换为list(如@chepner 所述),更新列表的值,最后加入list以取回字符串。例如:

traversed_list = list(traversed)

for i, val in enumerate(traversed_list):
    if val == letter:
        traversed_list[i] = replacewith
        print i

my_str = ''.join(traversed_list)
Run Code Online (Sandbox Code Playgroud)