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

Python模拟猫咪行走场景的循环终止问题求助

猫咪平台行走模拟问题修复

需求明确

  • 吃掉零食(*):将*替换为_,计数+1
  • 掉落规则:遇到.时掉落至下一行同列,保持原方向;最后一行遇洞直接终止循环
  • 转向与终止:走到行端点则转向;若在同一行内往返一次全程未遇洞,终止循环
  • 最终输出吃掉的零食总数

当前代码的核心问题

  1. 端点判断错误:column == len(platforms[row])是越界索引,行的最后一列应为len(platforms[row])-1,导致该条件永远不触发
  2. 缺少“全程未遇洞”的标记:当前仅判断端点是否为洞,而非整个行走过程中是否找到过洞
  3. 掉落逻辑冗余:两段掉落代码完全重复,且未处理最后一行遇洞的终止
  4. 终止条件逻辑混乱:没有正确识别“往返全程无洞”的终止场景

修正后的代码

platforms = []
n = int(input())

for _ in range(n):
    platforms.append(list(input()))

treats = 0
row = 0
column = 0
direction = 1  # 1向右,-1向左
# 标记当前行是否遇到过洞
found_hole = False
# 记录当前行是否已经完成过一次转向(即走到过一端)
has_turned = False

while True:
    # 超出行数范围,终止
    if row >= n:
        break
    
    current_row_len = len(platforms[row])
    # 处理走到端点的情况
    if column < 0 or column >= current_row_len:
        # 修正位置到端点
        column = max(0, min(column, current_row_len - 1))
        # 转向
        direction *= -1
        
        # 第一次走到端点,标记已转向
        if not has_turned:
            has_turned = True
        else:
            # 第二次走到端点,说明完成一次往返,若全程没遇到洞则终止
            if not found_hole:
                break
        # 转向后继续行走
        column += direction
        continue
    
    current_cell = platforms[row][column]
    
    if current_cell == '_':
        column += direction
    elif current_cell == '*':
        treats += 1
        platforms[row][column] = '_'
        column += direction
    elif current_cell == '.':
        # 最后一行遇洞,直接终止
        if row == n - 1:
            break
        # 标记当前行找到过洞
        found_hole = True
        # 掉落至下一行同列,保持原方向继续走
        row += 1
        column += direction

print(treats)

关键修改点说明

  1. 端点处理:修正越界后的位置计算,确保停在有效索引上;添加has_turned标记,判断是否完成往返
  2. 洞的标记:用found_hole记录当前行是否遇洞,往返结束后若该标记为False则终止
  3. 最后一行遇洞终止:明确判断row == n-1时遇洞直接break
  4. 逻辑简化:移除冗余的掉落代码,统一处理掉落逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 06:35:12