Python3如何用for循环移除字符串指定标点?现有代码不生效原因是什么?
代码不生效的原因及修复方案
核心问题原因
- 标点匹配规则写错:要求判断的标点包含
!,但你的判断元组里漏了!,反而多了不必要的空字符串"",直接导致匹配逻辑不符合需求。 - 字符串操作逻辑错误:Python中的字符串是不可变类型,你每次调用
replace或者translate都是基于**原始输入的字符串stringting**生成新字符串,每次循环都会直接覆盖new_string的值,最终只有最后一次循环匹配到的标点会被移除,前面匹配到的标点全部不会生效。 - 写法不符合要求:没有按照需求使用
if c in (",",".","?","!", ";",":")的遍历判断形式,而是通过索引取字符,不符合指定的代码规范。
符合要求的正确实现
def removePun(stringting): new_string = "" for c in stringting: # 严格使用要求的判断逻辑 if c in (",",".","?","!", ";",":"): continue new_string += c return new_string
可选的高效实现(无强制遍历要求时可用)
如果不需要强制使用for循环+指定if判断的规则,也可以用translate方法一次性处理,性能更高:
def removePun(stringting): remove_map = {ord(p): None for p in (",",".","?","!", ";",":")} return stringting.translate(remove_map)
内容的提问来源于stack exchange,提问作者Dre
相关产品推荐
相关产品推荐

