首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python返回列表的总和,其中5计为双精度,5之后的数字计为四倍

Python返回列表的总和,其中5计为双精度,5之后的数字计为四倍
EN

Stack Overflow用户
提问于 2020-10-13 09:52:45
回答 2查看 62关注 0票数 0

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

这就是我到目前为止所知道的:

代码语言:javascript
复制
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语句来解决此问题

EN

回答 2

Stack Overflow用户

发布于 2020-10-13 09:56:37

定义一个变量并在出现5时更改它

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
print(list_sum([5, 1, 6]))
>>> 20
票数 1
EN

Stack Overflow用户

发布于 2020-10-13 10:00:22

尝试这样做(在输入列表的长度范围内迭代:

代码语言:javascript
复制
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))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64327379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档