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

关于Python函数summer_of69中第二个while循环的逻辑问询

问题解析:Python代码中第二个while循环的运行逻辑

我无法理解以下Python代码中的第二个while循环:
当传入参数summer_of69([2,5,6,9,11])时,输出结果18正确,但我想知道9为何被忽略、11为何被累加,以及遇到6后,第二个while循环针对9和11是如何运行的?

def summer_of69(arr):
    total =0
    add = True
    for num in arr:
        while add:
            if num!= 6:
                total+=num
                break
            else:
                add = False
        while not add:
            if num!=9:
                break
            else:
                add= True 
                break
    return total

核心逻辑先理清

add是个开关变量:

  • add=True:当前数字需要累加到total
  • add=False:当前数字要被跳过,直到遇到9把开关重新打开

逐个拆解输入[2,5,6,9,11]的执行流程

1. 处理数字2

  • 第一个while add(此时add=True):判断2≠6,直接加到total(total=2),break跳出循环。
  • 第二个while not add:因为add还是True,循环条件不满足,直接跳过。

2. 处理数字5

  • 和数字2完全一致,total变成2+5=7,第二个循环不执行。

3. 处理数字6

  • 第一个while add(add=True):判断num=6,把add设为False,循环条件变为False,退出第一个while。
  • 第二个while not add(add=False,满足条件):判断num≠9,直接break跳出循环。
  • 结果:6没被累加,total仍为7,add保持False。

4. 处理数字9

  • 第一个while add:add=False,循环条件不满足,直接跳过。
  • 第二个while not add(add=False,满足条件):判断num=9,把add设为True,然后break跳出循环。
  • 结果:9没被累加(全程没有执行total+=num的代码),但add变回True。

5. 处理数字11

  • 第一个while add(add=True):判断11≠6,加到total(7+11=18),break跳出循环。
  • 第二个while not add:add是True,循环条件不满足,直接跳过。
  • 结果:total最终为18。

针对疑问的直接解答

  • 9为何被忽略?:处理9时只有第二个while循环执行,但这个循环里只做了把add从False改成True的操作,完全没有累加代码,所以9不会被加到total里。
  • 11为何被累加?:处理完9后add已经变回True,处理11时第一个while循环正常执行,把11加到了total中。
  • 遇到6后,第二个while循环针对9和11的运行过程:
    • 处理9:add为False,进入第二个while循环,发现num是9,修改add为True后break退出,全程不碰total。
    • 处理11:add已经是True,第二个while循环的条件not add不成立,所以这个循环根本不会运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 21:57:41