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

while循环与for循环的差异及代码调试问题解析

连续餐食重复检测的while循环错误分析

要实现的功能:给定一段时期的餐食供应列表,只要有连续两天供应相同餐食就返回True,否则返回False。下面注释掉的代码是最初的while循环实现,未注释的是官方提供的正确for循环解决方案:

def menu_is_boring(meals):
    """给定一段时期的餐食供应列表,若存在连续两天供应相同餐食则返回True,否则返回False。"""
#     i = 1
#     while (i) < (len(meals)-1) :
#         if meals[i] == meals[i+1] :
#             return True
#         else :
#             i = i + 1
#     return False

    for i in range(len(meals)-1):
        if meals[i] == meals[i+1]:
            return True
    return False
# 验证答案
q3.check()

官方解析

  • 正确方案的核心是range函数的调用:如果用range(len(meals)),会遍历所有餐食索引,最后一次迭代会拿最后一个元素和不存在的下一个元素对比,直接触发IndexError;而range(len(meals)-1)只会遍历到倒数第二个元素的索引,完美避免了越界问题。
  • 无需额外判断列表是否为空:当餐食列表长度为0或1时,range(0)和range(-1)都是空序列,for循环不会执行任何迭代,直接返回False,逻辑自洽。

你的while循环问题

  1. 起始索引错误:从i=1开始遍历,直接跳过了第一组连续元素meals[0]和meals[1]的检查,会漏掉开头的重复情况。
  2. 循环条件错误:while i < len(meals)-1会让循环在i等于len(meals)-2时停止,最后一组连续元素meals[len(meals)-2]和meals[len(meals)-1]根本没被检查到。

修正后的while循环实现

def menu_is_boring(meals):
    """给定一段时期的餐食供应列表,若存在连续两天供应相同餐食则返回True,否则返回False。"""
    i = 0
    while i < len(meals) - 1:
        if meals[i] == meals[i+1]:
            return True
        i += 1
    return False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:45:29