【问题标题】:My question is about a code i have described but it didn't work我的问题是关于我描述的代码,但它没有用
【发布时间】:2019-12-12 08:02:45
【问题描述】:

SUMMER OF '69:返回数组中数字的总和,除了忽略以 6 开头并延伸到下一个 9 的数字部分(每个 6 后面至少有一个 9)。返回 0 表示没有数字。¶

我曾尝试使用 pop 方法,但没有成功。我想知道为什么。

def summer_69(arr):
    num=(6,7,8,9)
    if num not in arr:
        return sum(arr)
    if num in arr:
        arr.pop(num)
        return sum(arr)

print(summer_69([4,5,6,7,8,9]))

我得到了像这个一样的全部金额,我得到了 39。

【问题讨论】:

  • 即使in 可以在这里工作,但它是不正确的,因为序列4,6,0,9,7 将是11...
  • 顺便说一句,您为什么期望上述方法有效?
  • num 是一个元组,您正在检查它是否在整数列表中,因此满足第一个条件并返回 sum
  • 请改进您的标题,使其更具描述性。
  • 在其他人跳到上面的 c) 点之前 - 没有正则表达式,但我假设这不在范围内......

标签: python pycharm


【解决方案1】:

Pop 删除指定索引处的项目。数组中的最大索引为 5(4 的索引为 0)。 我建议通过

找到 6 的索引
arr.index(6)

效率不高,但您可以反复弹出该索引,直到它变为 9,(如果“扩展至”意味着包括 9,则再次弹出)。

【讨论】:

    【解决方案2】:

    我建议您使用单个循环而不是这样做,因为它会更有效。使用单循环并继续将数字相加,直到遇到 6。一旦出现 6,就跳过数字,直到出现 9。再次开始将数字相加。运行时间为 O(n)。

    i=0

    总和 =0

    而我

    If a[i] == 6:
    
         While i < length and a[i] != 9:
    
             i += 1
    
    Else:
    
        Sum += a[i]
    
    i += 1
    

    返回总和

    【讨论】:

      猜你喜欢
      • 2020-04-17
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 2020-11-01
      • 2021-01-03
      • 1970-01-01
      • 2022-11-17
      • 2022-08-19
      相关资源
      最近更新 更多