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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:14:51