【问题标题】:Function that adds all the numbers in the sequence, except the numbers between 6 and 9将序列中的所有数字相加的函数,除了 6 和 9 之间的数字
【发布时间】: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


【解决方案1】:

你可以的

def addition_except_6to9(arr):
    return sum([x for x in arr if not 9 > x > 6])

它是所有元素的总和,除了 9 和 6 之间的元素(包括 6 和 9)如果你想排除它们然后使用return sum([x for x in arr if not 9 >= x >= 6])

更新 如果我理解正确

def addition_except_6to9(arr):
    f6 = arr.index(6)
    l9 = dict(map(reversed, enumerate(arr)))[9]
    ls = [x for x in arr if not(9 >= x >= 6) and not(l9 >= arr.index(x) >= f6)]
    return sum(ls)

现在arr = [4, 5, 6, 6, 7, 6, 8, 2, 9, 9, 1] 的输出是10 而不是12

【讨论】:

  • 嗨 @Ali Aref 只是对 func 用途的补充说明,它应该跳过列表中 6 到 9 之间的所有数字,但不一定更大或更小。如果介于两者之间,也应该跳过 2 o3。我在原始问题中写了示例。
  • 感谢@Ali Aref,我收到错误“名称 a 未定义”。高级解决方案,我很难理解。可以稍微解释一下吗? l9是如何定义的?这部分将跳过列表中 6 到 9 之间的所有元素:''' not(l9 >= arr.index(x) >= f6)?'''
  • @ddt 确定 l9 定义了 arr 中最后 9 项的索引,f6 是 arr 中的前 6 个元素。现在检查一下,错误已解决(错过拼写)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
相关资源
最近更新 更多