SUMMER OF '69问题中add=True和add=False的使用逻辑解析
summer_69函数中
add标志的逻辑说明 问题背景
计算数组中所有数字的总和,但忽略从6开始到下一个9结束的区间内的数字(每个6后至少有一个9)。若数组为空则返回0。
示例
summer_69([1, 3, 5]) --> 9 summer_69([4, 5, 6, 7, 8, 9]) --> 9 summer_69([2, 1, 6, 9, 11]) --> 14
实现代码
def summer_69(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是一个状态开关,用来控制当前遍历的数字是否需要被计入总和:
add=True:处于「正常累加状态」,当前数字要加到总和里add=False:处于「忽略区间状态」,当前数字跳过,不加到总和里
逐段拆解代码逻辑
- 初始状态:
add=True,默认所有数字都要累加 - 遍历数组每个数字:
- 第一个
while add循环(仅在正常累加状态下执行):- 如果当前数字不是6:直接加到
total,然后break退出循环 - 如果当前数字是6:把
add改成False,退出循环(6本身也不会被累加)
- 如果当前数字不是6:直接加到
- 第二个
while not add循环(仅在忽略状态下执行):- 如果当前数字不是9:直接break,啥也不做(数字跳过)
- 如果当前数字是9:把
add改回True,退出循环(9本身也不会被累加)
- 第一个
结合示例理解
拿summer_69([4,5,6,7,8,9])举例:
- 4、5时
add=True,累加后total=9 - 遇到6,
add变为False,跳过6 - 7、8时
add=False,全部跳过 - 遇到9,
add变回True,跳过9 - 最终返回
total=9,符合预期
注:代码里的while其实只执行一次判断(因为每个while里都有break),本质和if逻辑等价,只是写法不同。
内容的提问来源于stack exchange,提问作者user22179543
相关产品推荐
相关产品推荐

