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

Python代码while循环执行两次后陷入死循环问题求助

解决Z字形字符分配代码的死循环问题

问题根源

你的代码死循环的核心原因是第二个for循环的变量名覆盖了函数参数k:
原代码中第二个循环写的是for k in range(k-2,-1,-1),这里的循环变量k会直接替换掉函数传入的参数k。比如初始k=3,第一次执行这个循环后,k会被赋值为1、0,后续外层while循环里的第一个for j in range(0,k)就会变成range(0,0),完全不执行,i不再递增,导致while i < len(s)永远成立,陷入死循环。

修正后的代码

把第二个循环的变量名改成不会冲突的名称(比如m),同时增加索引越界检查(避免字符串长度不是Z字形周期倍数时报错):

def f(s, k):      
    l = [[] for _ in range(k)]
    i = 0
    n = len(s)
    while i < n:
        # 从上到下填充k个列表
        for j in range(k):
            if i >= n:
                break
            l[j].append(s[i])
            i += 1
        # 从k-2到0往回填充(跳过最后一个列表)
        for m in range(k-2, -1, -1):
            if i >= n:
                break
            l[m].append(s[i])
            i += 1
    return l

代码说明

  1. 初始化k个空列表,用于存放对应位置的字符
  2. 外层while循环保证处理完字符串所有字符
  3. 第一个for循环:按顺序把字符放入第0到第k-1个列表(对应需求里的“第1个到第k个字符放入第1到第k个列表”)
  4. 第二个for循环:从第k-2个列表往第0个列表倒序放入字符(对应需求里的“第k+1个字符放入第k-1个列表,后续依次放入k-2、k-3等”)
  5. 每次填充前检查i是否超出字符串长度,避免索引越界错误

测试示例

比如输入s="ABCDEFGHI",k=3,调用f(s,3)会返回:
[['A', 'E', 'I'], ['B', 'D', 'F', 'H'], ['C', 'G']],完全符合需求的分配规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:15:58