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

将C++代码转Python后运行报错:'str' object does not support item assignment

解决Python中'str' object does not support item assignment错误

嘿,这个报错我太熟啦!问题出在Python的字符串特性上——字符串是不可变类型,你没法直接像修改数组那样给字符串的某个位置赋值,比如s[i] = chr(...)这种操作肯定会触发报错。

解决方案思路

把字符串转换成列表(列表是可变类型,支持修改任意位置的元素),等所有字符调整完成后,再把列表转回字符串就行啦。

修正后的完整代码

n, k = input().split()
k = int(k)
s = list(input())  # 关键一步:将字符串转为可变的列表
l = len(s)
ans = 0

# 先计算所有字符到最近端点(a或z)的总距离
for i in range(l):
    ans += min(ord(s[i]) - ord('a'), ord('z') - ord(s[i]))

if ans > k:
    print("-1")
else:
    for i in range(l):
        # 计算当前字符到a和z的距离
        dist_to_a = ord(s[i]) - ord('a')
        dist_to_z = ord('z') - ord(s[i])
        
        if dist_to_a > dist_to_z:
            # 离z更近,优先往z方向调整
            now = dist_to_z
            if now >= k:
                s[i] = chr(ord(s[i]) + k)
                k = 0
            else:
                s[i] = 'z'
                k -= now
        else:
            # 离a更近,优先往a方向调整
            now = dist_to_a
            if now >= k:
                s[i] = chr(ord(s[i]) - k)
                k = 0
            else:
                s[i] = 'a'
                k -= now
        # k耗尽后提前退出循环,提升效率
        if k == 0:
            break
    # 将修改后的列表转回字符串输出
    print(''.join(s))

关键修改点说明

  1. 字符串转列表:s = list(input()),这一步让我们拥有了可以修改的字符序列
  2. 列表转回字符串:最后用''.join(s)把调整后的列表重新组合成字符串输出
  3. 补全了你代码里未完成的k -= now逻辑,还添加了k耗尽后提前退出循环的优化

另外提个小细节:你原代码里计算ans用了max,我猜应该是min(要统计每个字符到最近端点的总距离,判断k是否足够),如果原逻辑确实是max,你改回去就好~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:34:22