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

求实现可往复收缩的Python循环计数逻辑(类似体育课跑队列)

解决双向收缩范围的循环计数问题

原代码的核心问题在于边界条件判断逻辑混乱、范围收缩与方向反转的时机不对,导致容易出现计数越界或终止逻辑失效的情况。以下是修正后的实现方案,清晰处理范围收缩、方向切换与循环终止,彻底避免越界问题:

修正后的代码

size = 8  # 初始范围为 0 到 size(示例中为0-8)
current = 0
current_low = 0
current_high = size
direction = 1  # 1 表示递增,-1 表示递减

# 循环执行直至范围失效(左边界大于右边界)或显式终止
while current_low <= current_high:
    print(current)  # 打印当前计数,可根据需求移除或替换为业务逻辑
    
    # 到达当前范围右端点时,收缩范围并反转方向
    if current == current_high:
        current_low += 2
        current_high -= 2
        direction = -1
    # 到达当前范围左端点时,收缩范围并反转方向
    elif current == current_low:
        current_low += 2
        current_high -= 2
        direction = 1
    
    # 执行下一步计数移动
    current += direction

# 输出最终状态
print(f'current_low is {current_low}')
print(f'current_high is {current_high}')
print(f'current is {current}')

关键改进点

  • 明确范围边界:用current_low和current_high直接标记当前计数范围的两端,替代原代码中通过cursize间接计算的方式,逻辑更直观,减少出错概率。
  • 先判断边界再移动:每次计数后先检查是否到达当前范围的端点,完成范围收缩和方向反转后再执行下一步移动,从根源避免越界。
  • 合理终止条件:以current_low <= current_high作为循环终止条件,当范围收缩到左边界超过右边界时自动停止,无需依赖cursize的数值判断。
  • 支持显式终止:若需要手动终止循环,可在循环内添加自定义判断(比如检测特定计数值),设置终止标志即可,示例中可参考注释添加相关逻辑。

执行流程示例(size=8)

初始范围0-8:

  1. 从0递增到8 → 范围收缩为2-6,方向转为递减
  2. 从8递减到2 → 范围收缩为4-4,方向转为递增
  3. 从2递增到4 → 范围收缩为6-2(左边界>右边界),循环终止

最终计数停在5,范围边界为6和2,符合预期且无越界。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:48:21