Python实现paper_doll函数时循环内变量值无法正常更新问题
问题说明
需求为实现函数:输入任意字符串,返回新字符串,原字符串中的每个字符在新字符串中连续重复3次。
现有实现运行异常:while循环执行过程中,letter变量始终取到输入字符串的第一个字符,无法随循环迭代正常更新,输出结果不符合预期。
异常代码
def paper_doll(text): text = list(text) l = len(text) i = 0 while i < l: letter = text[i]`enter code here` print(text[i]) text.insert(i+1, letter) text.insert(i+2, letter) i += 1 return "".join(text)
问题根因
- 代码存在冗余语法垃圾:
letter = text[i]行尾多余的`enter code here`是代码编辑时的遗留内容,无实际作用。 - 循环终止条件错误:变量
l保存的是字符串转列表后的初始长度,但循环内每次都会向列表插入2个新元素,列表长度动态增加,用固定初始值做终止条件,会导致循环提前结束,无法遍历完所有原字符。 - 索引步进逻辑错误:在当前索引
i后插入2个重复字符后,原字符串的下一个字符位置会向后偏移2位,但代码中i每次仅自增1,下一轮循环读取到的text[i]是上一轮刚插入的重复字符,根本访问不到原字符串的后续字符,这就是letter一直取到第一个字符的核心原因。
修复方案
最简洁、无索引错乱风险的实现方式是直接构造新结果列表,不需要在原列表上做插入操作,从根源上避免索引计算错误:
def paper_doll(text): result = [] for char in text: result.append(char * 3) return "".join(result)
如果要保留原有的列表插入+while循环的写法,需要修正索引步进逻辑,移除固定长度限制,每次处理完一个字符后直接跳过自己插入的2个重复位,同时删掉调试用的print语句:
def paper_doll(text): text = list(text) i = 0 while i < len(text): letter = text[i] text.insert(i+1, letter) text.insert(i+2, letter) # 步长设为3,跳过当前字符+2个插入的重复字符,直接定位到下一个原字符 i += 3 return "".join(text)
两种实现的测试结果一致:传入参数
"abc"时,返回值为"aaabbbccc",符合需求。
内容的提问来源于stack exchange,提问作者Prajeeth Muthukumar
相关产品推荐
相关产品推荐

