python - 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 语句来解决此问题
解决方案
定义一个变量,当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
推荐阅读
- python - 在 Python 中创建 Whoosh 索引时丢失了一些行
- c++ - 如何将数组分隔成偶数列(C++)
- apache-spark - Dataframes join 在 Spark Scala 中返回空结果
- android - 协程中的范围混淆
- python - 将文件写入 EFS docker 卷时,Python 进程没有响应
- javascript - 将矩形对象放在画布的边框上
- putty - 从 PUTTY 连接到运行 micropython 的 ESP8266
- macos - 使用mac终端在CSV特定列的N位置添加一个字符
- python - 在python中将一个类移动到它自己的文件中
- c++ - 我可以在析构函数中调用公共函数来释放内存吗?