首页 > 解决方案 > Python 返回列表的总和,其中 5 计为双倍,5 之后的数字计为四倍

问题描述

给定一个列表,返回列表中所有数字的总和。但是,如果数字 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 语句来解决此问题

标签: pythonlistfor-loopif-statementcontrol-flow

解决方案


定义一个变量,当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

推荐阅读