我尝试在下面运行代码,但我不能,因为它启动了以下错误:
不支持的操作数类型 - :'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]
答案 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)
评论应该解释这些变化。要点:
str
(st
变量),因为str
是不可变的。请改用list
,每个元素都是一个字符(长度为1的str
)。str
时,你得到的是它的字符,而不是你正在寻找的索引j
。我使用了enumerate()
,它可以为您提供字符和索引。st
中的最后一个索引不是len(st)
,而是len(st) - 1
,因为Python的索引是基于0的。此外,由于Python支持负周期索引,因此实际上并不需要整个if语句。试着把它留下来。