字符串索引的不受支持的操作数类型

时间:2018-03-24 21:16:43

标签: python python-3.x

我尝试在下面运行代码,但我不能,因为它启动了以下错误:

  

不支持的操作数类型 - :'str'和'int'。

我一直在搜索,我发现它与输入有关,但在这种情况下不是。

st = "text"
for i in range(0, n):
    for j in st:
        if j == 0:
            st[j] = st[len(st)]
        else:
            st[j] = st[j - 1]

3 个答案:

答案 0 :(得分:3)

有问题的部分是st[j] = st[j - 1],更具体地说是j - 1,你减去'str'和'int'类型。这在Python中不受支持。

答案 1 :(得分:0)

您遇到的第一个问题是j是一个字符串,您无法从字符串中减去整数。

j = 't'
j - 1 # TypeError: unsupported operand type(s) for -: 'str' and 'int'

您将遇到的下一个问题是字符串是不可变的,因此您无法设置字符串的给定字符。

st = 'test'
st[0] = 'a' # TypeError: 'str' object does not support item assignment

由于字符串是不可变的,因此如果要更改一个字符,则需要创建一个新字符串。在这种情况下,您想要做的就是将字符串旋转n。这可以这样实现。

def rotate(s, n):
    if s:
        n = n % len(s)
        return s[-n:] + s[:-n] # This creates a new string
    else:
        return ''

rotate('test', 1) # 'ttes'

答案 2 :(得分:0)

您有几个错误。这是一个我相信你想要的代码:

n = 1
st = "text"
# Make a copy of st, but make it a list
st_new = list(st)
for i in range(0, n):
    # Loop over characters c and their indices j in st
    for j, c in enumerate(st):
        # Assign to st_new, lookup values in st
        if j == 0:
            st_new[j] = st[len(st) - 1]  # The last index is len(st) - 1
        else:
            st_new[j] = st[j - 1]
# Convert st_new to a str
st_new = ''.join(st_new)

评论应该解释这些变化。要点:

  • 您无法分配到strst变量),因为str是不可变的。请改用list,每个元素都是一个字符(长度为1的str)。
  • 当你循环str时,你得到的是它的字符,而不是你正在寻找的索引j。我使用了enumerate(),它可以为您提供字符和索引。
  • st中的最后一个索引不是len(st),而是len(st) - 1,因为Python的索引是基于0的。此外,由于Python支持负周期索引,因此实际上并不需要整个if语句。试着把它留下来。