Python实现字符间插入|功能时部分字符后无分隔符问题排查
问题原因
- 核心问题1:
str.replace()是全局匹配替换,调用word.replace(let, let1)时,会替换字符串中所有和let相同的字符,而非仅替换当前索引位置的单个字符。比如示例输入大写后包含两个A,处理最后一个A时全局替换会把前面的A也加上|,遍历到前面的A时字符已经被修改,逻辑完全混乱。 - 核心问题2:循环范围是基于原始字符串长度计算的,但循环过程中不断往
word中插入|,字符串长度持续变长,用原始索引取修改后字符串的字符,取到的内容已经和预期的原始字符完全错位。 - 核心问题3:
if word[Y:].count(word[Y]) >= 2: pass的判断逻辑不符合需求,给每个字符加|不需要判断字符是否重复,这个判断会直接跳过重复字符的处理,自然会出现漏加|的情况。
修复方案
实现每个字符之间插入|的需求不需要复杂循环,直接用字符串join方法即可完成核心逻辑:
def art(word): processed = '|'.join(word.upper()) word = f"|{processed}|" # 生成分隔线 pat = ''.join('+' if i%2==0 else '-' for i in range(len(word))) print(f"\n{pat}\n\n{word}\n\n{pat}") word = "Craig'n'Dave" art(word)
运行后即可输出预期结果。
内容的提问来源于stack exchange,提问作者CamoMP
相关产品推荐
相关产品推荐

