关于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:当前数字需要累加到totaladd=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不成立,所以这个循环根本不会运行。
- 处理9:
内容的提问来源于stack exchange,提问作者khale abhishek
相关产品推荐
相关产品推荐

