【发布时间】:2021-08-12 00:28:33
【问题描述】:
我需要帮助来了解此功能的工作原理。这个函数的目的是对序列中的所有数字求和,除了数组中6到9之间的数字,应该跳过它们,继续对原始数字9之后的数字求和。
对于这个例子 [4, 5, 6, 6, 7, 6, 8, 2, 9, 1] 结果是 10,跳过列表中 6 到 9 之间的所有数字。
def addition_except_6to9(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
我怎么理解,
第一个 while 执行到数字为 6,然后第一个 while 是 break,然后 go
到顶部 for 循环的开头。比它需要下一个数字,先检查一下,
条件为假,然后它将转到第一个 while 的 else 并设置变量
添加为假。
比从数组中取下一个数字,检查第二个,对于不同的数字 九个,如果条件为真并且它将打破它,并继续前进 循环,取下一个数字...直到第二个 while 中的条件为假 number = 9,然后转到 else 分支,并将变量 add 设置为 true,并且 从顶部继续 for 循环,添加数组中 9 之后的数字。
我不太确定这个功能是否以这种方式工作。
为什么我们需要先休息一下?
【问题讨论】:
-
你应该使用
if而不是while,并且不需要中断。第二个while也可以变成else。 -
[x for x in ml if x not in range(6,10)] 其中 ml 是您的列表。
-
大家好,感谢您的快速解答。我根据@tobmei05 提示做了更简单的函数:'''def summer_69(arr): return sum([x for x in arr if x not in range(6,10)]) ''' 我测试了这个函数,它适用于更简单的示例,但在更复杂的情况下不起作用。如果以下结果为 12,则应为 10:summer_69([4, 5, 6, 6, 7, 6, 8, 2, 9, 1]) 12
标签: python for-loop while-loop break