【问题标题】:Return the sum of the numbers in the array,except ignore sections of numbers返回数组中数字的总和,忽略数字部分除外
【发布时间】:2019-11-14 04:40:31
【问题描述】:

SUMMER OF '69:返回数组中数字的总和,除了 忽略以 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):
    if 6 in arr and 9 in arr:
        return sum(arr[:arr.index(6)])+sum(arr[arr.index(9):])
    else:
        total=0
        for x in arr:
            total+=x
    return total

我期望 Summer_69([4, 5, 6, 7, 8, 9]) --> 9 的输出,但是 实际输出为 18。
我期望 summer_69([2, 1, 6, 9,11]) --> 14,但实际输出为 23

【问题讨论】:

    标签: arrays python-3.x function


    【解决方案1】:

    由于字符串转换,不确定这是否是一个好方法。

    import re
    
    def summer_69(arr):
        if 6 in arr and 9 in arr:
            #Using Regex to remove everything between 6 & 9 and convert object back to list of ints
            arr = [int(i) for i in re.sub(r"(6.*?9)", "", "_".join(map(str, arr))).split("_") if i]  
            return sum(arr)
        else:
            return sum(arr)    
    
    print(summer_69([1, 3, 5])) #--> 9 
    print(summer_69([4, 5, 6, 7, 8, 9])) #--> 9 
    print(summer_69([2, 1, 6, 9, 11])) #--> 14
    

    【讨论】:

      【解决方案2】:

      您可以通过删除 6 到 9 之间的所有项目(对于所有间隔)并总结列表中剩余的元素来做到这一点。

      要删除 6 到 9 之间的部分,您可以使用 slice() Function

      slice() function 返回一个切片对象。

      切片对象用于指定如何对序列进行切片。你可以 指定切片的开始位置和结束位置。

      def summer_69(arr):
          while 6 in arr: # while 6 in array
              idx6 = arr.index(6)
              idx9 = arr.index(9)
              del arr[idx6:idx9+1] # delete part of array between index of 6 and index of 9
              print (arr) # [4, 5, 1, 1, 4, 3]
          return sum(arr)
      
      
      print (summer_69([4, 5, 6, 7, 8, 9,1,1,6,2,3,9,4,3]))
      

      输出:

      18
      

      例如

      print (summer_69([1, 3, 5])) # 9
      print (summer_69([4, 5, 6, 7, 8, 9])) # 9
      print (summer_69([2, 1, 6, 9, 11])) # 14
      

      【讨论】:

      • 我们也可以在dict中存储数字的索引,这将需要更多的内存,但我们会得到O(n)而不是O(n^2)
      【解决方案3】:

      我是编程新手,我对这个问题的解决方案考虑了“所有”可能的变化,如下所示:

      def summer_69(*arr):
          a=arr
          sum_a=0
          sum_a6=0
          sum_a69=0
          sum_a96=0
          sum_a9=0
          sum_each=[]
          print("given array: {}" .format(a))
      
          if 6 not in a:
              sum_a=sum((a))
              sum_each.append(sum_a)
              print("\nif 6 not in a:{} " .format(a))
              print("sum_a={}" .format(sum_a))
          else:
              while len(a)>0:
                  if 6 in a and 9 in a:
                      if a.index(6)<a.index(9):
                          a69=a[:a.index(6)]
                          sum_a69=sum((a69))
                          a69_pri=a[a.index(9):]
                          a=a69_pri
                          sum_each.append(sum_a69)
                          print("\nif a.index(6)<a.index(9): {}" .format(a69))
                          print("sum_a69={}" .format(sum_a69))
                          continue
                      elif a.index(9)<a.index(6):
                          a96=a[a.index(9)+1:a.index(6)]
                          sum_a96=sum((a96))
                          a96_pri=a[a.index(6):]
                          a=a96_pri
                          sum_each.append(sum_a96)
                          print("\nif a.index(9)<a.index(6): {}" .format(a96))
                          print("sum_a96={}" .format(sum_a96))
                          continue
                  elif 6 in a and 9 not in a:
                      a6=a[:a.index(6)]
                      sum_a6=sum((a6))
                      a=a6
                      sum_each.append(sum_a6)
                      print("\nelif 6 in a and 9 not in a: {}" .format(a6))
                      print("sum_a6={}" .format(sum_a6))
                      break
                  elif 6 not in a and 9 in a:
                      a9=a[a.index(9)+1:]
                      sum_a=sum((a9))
                      a=a9
                      sum_each.append(sum_a)
                      print("\nelif 6 not in a and 9 in a: {}" .format(a9))
                      print("sum_a9={}" .format(sum_a9))
                      break
      
          sum_all=sum((sum_each))
          print(sum_each)
          print("sum_all={}" .format(sum_all))
          return sum_all
      

      【讨论】:

      • 欢迎来到 Stackoverflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
      【解决方案4】:

      查看我简单直接的运行代码

      def summer_69(arr):
          result=0
          if 6  not in arr:
              result=result+sum(arr)
              return result
          elif len(arr)==0:
              return 0
          else:
              return sum(arr)-sum(arr[arr.index(6):arr.index(9)+1])
      

      【讨论】:

        【解决方案5】:
        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
        

        【讨论】:

        • 请在您的回答中添加一点描述。
        【解决方案6】:
        def summer_69(arr):
            if 6 and 9 in arr:
                c=sum(arr[arr.index(6):arr.index(9)+1)
                return sum(arr)-c
            else:
                return sum(arr)
        print(summer_69([4,5,6,7,8,9]))
        

        【讨论】:

        • 欢迎来到 Stack Overflow!在 StackOverflow 上添加解释为什么你的解决方案应该工作是一个很好的做法。
        【解决方案7】:

        您的代码很棒,但它也考虑了“9”。为避免这种情况,您可以通过为整数 9 获取额外的 +1 索引位置来对代码进行一些修改。

        def summer_69(arr):
            if 6 in arr and 9 in arr:
                return sum(arr[:arr.index(6)])+sum(arr[arr.index(9) + 1:])
            else:
                total=0
                for x in arr:
                    total+=x
            return total
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-05
          • 1970-01-01
          • 2014-03-13
          • 1970-01-01
          相关资源
          最近更新 更多