将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))
关键修改点说明
- 字符串转列表:
s = list(input()),这一步让我们拥有了可以修改的字符序列 - 列表转回字符串:最后用
''.join(s)把调整后的列表重新组合成字符串输出 - 补全了你代码里未完成的
k -= now逻辑,还添加了k耗尽后提前退出循环的优化
另外提个小细节:你原代码里计算ans用了max,我猜应该是min(要统计每个字符到最近端点的总距离,判断k是否足够),如果原逻辑确实是max,你改回去就好~
内容的提问来源于stack exchange,提问作者Mohammad
相关产品推荐
相关产品推荐

