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

Python遍历字符串将大写字母替换为#的方法及问题修复

问题根因

Python 中的字符串是不可变对象,str.replace() 方法不会修改原始字符串,只会返回执行替换操作后的新字符串。你的代码中调用 string.replace(x, "#") 后没有接收返回值,原始字符串从未被修改,因此每次打印都会输出原始内容。
除此之外你的代码还有一处逻辑问题:每次循环都打印全量字符串,最终会输出和字符串长度相等的行数,不符合替换完成后输出结果的预期。

原遍历逻辑的修复写法

如果要保留逐字符遍历判断的思路,不要尝试直接修改原字符串,可以初始化新的变量存储拼接结果:

string = "hOw Are yOu?"
result = ""
for x in string:
    if x.isupper():
        result += "#"
    else:
        result += x
print(result)

如果字符串长度较大,推荐用列表存储字符后再拼接,避免反复生成新字符串对象带来的性能损耗:

string = "hOw Are yOu?"
res_chars = []
for x in string:
    res_chars.append("#" if x.isupper() else x)
result = "".join(res_chars)
print(result)

以上代码运行后都会输出正确结果:h#w #re y#u?

注意:不要试图在循环中写 string = string.replace(x, "#") 来修改原变量,这种写法虽然在当前示例中能得到正确结果,但replace会替换字符串中所有和当前字符匹配的内容,而非仅替换当前遍历位置的字符,遇到重复大写字符的场景容易出现非预期行为。

更简洁的实现方案

不需要手动编写遍历逻辑,可以用更Pythonic的写法实现相同效果:

  • 无依赖的生成器表达式写法:
string = "hOw Are yOu?"
result = "".join("#" if c.isupper() else c for c in string)
print(result)
  • 正则替换写法(适合文本处理场景):
import re
string = "hOw Are yOu?"
result = re.sub(r"[A-Z]", "#", string)
print(result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:39:17