类型错误:';str';对象不支持项分配(Python)

类型错误:';str';对象不支持项分配(Python),python,for-loop,Python,For Loop,这就是我想做的: 输入=ABCDEFG ***DEFG A***EFG AB***FG ABC***G ABCD*** 这就是我写的代码 def loop(input): output = input for index in range(0, len(input)-3): #column length output[index:index +2] = '***' output[:index] = input[:inde

这就是我想做的:

输入=ABCDEFG

***DEFG
A***EFG
AB***FG
ABC***G
ABCD***
这就是我写的代码

def loop(input):
    output = input
    for index in range(0, len(input)-3):              #column length
        output[index:index +2] = '***'
        output[:index] = input[:index]
        output[index+4:] = input[index+4:]
        print output + '\n'
但是我得到了一个错误:TypeError:'str'对象不支持项分配


帮助?

在Python中,字符串是不可变的-一旦创建,就不能更改。这意味着,与列表不同,您不能指定索引来更改字符串

string = "Hello World"
string[0] # => "H" - getting is OK
string[0] = "J" # !!! ERROR !!! Can't assign to the string

在您的情况下,我会创建一个列表:
output=list(input)
,然后在您完成后将其转换回字符串:
return”“。在python中,如果您不能将值分配给字符串数组中的特定索引,则可能需要连接。比如:

for index in range(0, len(input)-3):
    output = input[:index]
    output += "***"
    output += input[index+4:]

不过,你还是要注意边界。现在循环结束时,索引+4将太大并导致错误。

您不能修改字符串的内容,只能创建一个带有更改的新字符串。所以你不需要上面的函数,而是想要这样的函数

def loop(input):
    for index in range(0, len(input)-3):              #column length
        output = input[:index] + '***' + input[index+4:]
        print output

字符串是不可变的。不能更改字符串中的字符,但必须创建新字符串。如果要使用项分配,可以将其转换为列表,操纵列表,然后将其重新连接为字符串

def loop(s):
    for index in range(0, len(s) - 2):
        output = list(s)                    # create list from string
        output[index:index+3] = list('***') # replace sublist
        print(''.join(output))              # join list to string and print
或者,只需将旧字符串的片段与
'***'
组合起来创建一个新字符串:

        output = s[:index] + "***" + s[index+3:] # create new string directly
        print(output)                            # print string

还要注意的是,代码中似乎有一些逐个错误,您不应该使用
input
作为变量名,因为它会隐藏相同名称的内置函数。

字符串是不可变的,因此不支持像列表一样的赋值,您可以使用
str.join
将字符串的片段连接在一起,在每次迭代中创建一个新字符串:

def loop(inp):
    return "\n".join([inp[:i]+"***"+inp[i+3:] for i in range(len(inp)-2)])
inp[:i]
将获得第一个片段,第一次迭代将是一个空字符串,然后每次迭代都在字符串上移动另一个字符,
inp[i+3://code>将获得一个片段,从当前索引
i
开始,再加上三个索引,同时在字符串上移动一个字符,然后,只需将两个片段连接到
***
字符串

In [3]: print(loop("ABCDEFG"))
***DEFG
A***EFG
AB***FG
ABC***G
ABCD***

字符串是不可变的。如果要更改它,请将其转换为列表,操纵列表,然后将其重新转换为字符串。我该如何做?
output=input[:input]
应该是
output=input[:index]