TypeError:'str'对象不支持项分配(Python)

2024-05-13 02:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

所以这就是我要做的:

输入=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'对象不支持项分配

帮忙?


Tags: 代码inloopforinputoutputindexab
3条回答

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

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

在你的例子中,我会把output列成一个列表:output = list(input),然后在你完成后将它变成一个字符串:return "".join(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作为变量名,因为它会隐藏同名的内置函数。

不能修改字符串的内容,只能使用更改创建新字符串。所以你想要的不是上面的函数

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

相关问题 更多 >