0

给定一个列表,返回列表中所有数字的总和。但是,如果数字 5 出现在列表中,则必须将其翻倍,而紧随 5 之后的数字需要翻两番。所以下面的列表 [1, 2, 4, 1, 5, 2] 应该返回 26,而 [5, 1, 6] 应该返回 20。

这是我到目前为止所拥有的:

def list_sum(x):
    if len(x) == 0:
        return 0
    else:
        sum2 = 0
        for i in x:
            if i == 5:
                sum2 += 5*2
            if x[i - 1] == 5:
                sum2 += i * 4
            else:
                sum2 += i
       
    return sum2

我可以成功完成问题的第一部分,将列表中的任何 5 乘以 2,但在第二部分遇到问题,我必须要求代码将 5 之后的数字翻两番。我x[i - 1] == 5想基本上是索引5 之后出现的元素,但在尝试了一些打印语句之后,我注意到那行代码实际上并没有做任何事情......所以有什么提示吗?

快速说明:仅使用循环和 if 语句来解决此问题

4

2 回答 2

1

定义一个变量,当5出现时改变它

def list_sum(x):
    IfFive = False
    if len(x) == 0:
        return 0
    else:
        sum2 = 0
        for i in x:
            if i == 5:
                sum2 += 5*2
                IfFive = True
            elif IfFive:
                sum2 += i * 4
                IfFive = False
            else:
                sum2 += i
       
    return sum2

结果:

print(list_sum([5, 1, 6]))
>>> 20
于 2020-10-13T01:56:37.180 回答
1

尝试这样(迭代输入列表的长度范围,而不是:

mylist = [1, 2, 4, 1, 5, 2] 
def list_sum(thelist):
  sum2 = 0
  for x in range(len(thelist)):
    if thelist[x] == 5:
      sum2 += 5*2
    elif thelist[x-1] == 5:
      sum2 += thelist[x]*4
    else:
      sum2 += thelist[x]
   
  return sum2

print(list_sum(mylist))
于 2020-10-13T02:00:22.480 回答