Python模拟猫咪行走场景的循环终止问题求助
猫咪平台行走模拟问题修复
需求明确
- 吃掉零食(
*):将*替换为_,计数+1 - 掉落规则:遇到
.时掉落至下一行同列,保持原方向;最后一行遇洞直接终止循环 - 转向与终止:走到行端点则转向;若在同一行内往返一次全程未遇洞,终止循环
- 最终输出吃掉的零食总数
当前代码的核心问题
- 端点判断错误:
column == len(platforms[row])是越界索引,行的最后一列应为len(platforms[row])-1,导致该条件永远不触发 - 缺少“全程未遇洞”的标记:当前仅判断端点是否为洞,而非整个行走过程中是否找到过洞
- 掉落逻辑冗余:两段掉落代码完全重复,且未处理最后一行遇洞的终止
- 终止条件逻辑混乱:没有正确识别“往返全程无洞”的终止场景
修正后的代码
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)
关键修改点说明
- 端点处理:修正越界后的位置计算,确保停在有效索引上;添加
has_turned标记,判断是否完成往返 - 洞的标记:用
found_hole记录当前行是否遇洞,往返结束后若该标记为False则终止 - 最后一行遇洞终止:明确判断
row == n-1时遇洞直接break - 逻辑简化:移除冗余的掉落代码,统一处理掉落逻辑
内容的提问来源于stack exchange,提问作者Alegra
相关产品推荐
相关产品推荐

