You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行Python代码报错:unsupported operand type(s) for -: 'str' and 'int'

解决你遇到的unsupported operand type(s) for -: 'str' and 'int'错误

咱们直接拆解问题根源,你的代码里有几个核心问题导致了这个报错,一步步来捋:

1. 字符与整数的错误运算

你的内层循环写的是for j in st:,这里的j是字符串st里的单个字符(比如't'、'e'这类字符串类型),但你在else分支里写了st[j - 1]——这就相当于拿字符串去减整数,Python肯定会抛出类型不兼容的报错,这就是你看到的那个错误的直接原因。

2. 字符串是不可变类型

Python里的字符串是不能直接通过下标赋值修改的,哪怕j是合法下标,st[j] = st[j - 1]这种写法本身也会抛出TypeError: 'str' object does not support item assignment。

3. 其他逻辑漏洞

  • 变量n完全没定义,range(0, n)会先触发NameError;
  • if j == 0的判断完全无效,因为j是字符,永远不可能等于整数0。

修正后的示例代码

假设你想实现的是字符串的循环移位(比如把每个字符往前挪一位,最后一位移到开头),可以改成这样:

st = "text"
# 把字符串转成列表(列表是可变类型,支持下标修改)
st_list = list(st)
n = 1  # 定义移位次数,这里设为1次
for _ in range(n):
    # 先保存最后一个字符
    last_char = st_list[-1]
    # 从后往前遍历下标,实现字符移位
    for j in range(len(st_list)-1, 0, -1):
        st_list[j] = st_list[j-1]
    # 把最后一个字符放到开头
    st_list[0] = last_char
# 再把列表转回字符串
st = ''.join(st_list)
print(st)  # 输出: ttex

简单解释下:

  • 用列表承载字符串内容,解决字符串不可修改的问题;
  • 循环时遍历的是字符串的下标而非字符本身,这样就能合法进行j-1的整数运算;
  • 提前定义好n的值,避免未定义变量的错误。

内容的提问来源于stack exchange,提问作者ricardo chirinos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:38:08