Python 我试图解决codingbat.com中的一个问题,问题名称是;幸运之和;
给定3个Python 我试图解决codingbat.com中的一个问题,问题名称是;幸运之和;,python,python-3.x,algorithm,Python,Python 3.x,Algorithm,给定3个int值,abc,返回它们的总和。但是,如果其中一个值为13,则该值不计入总和,且其右侧的值不计入。例如,如果b是13,那么b和c都不计算在内。例如: lucky_sum(1, 2, 3) → 6 lucky_sum(1, 2, 13) → 3 lucky_sum(1, 13, 3) → 1 lucky_sum(1, 13, 13) → 1 下面是我的解决方案。我不明白我的代码出了什么问题 def lucky_sum(a, b, c): list1 = [a, b, c]
int
值,abc
,返回它们的总和。但是,如果其中一个值为13
,则该值不计入总和
,且其右侧的值不计入。例如,如果b
是13
,那么b
和c
都不计算在内。例如:
lucky_sum(1, 2, 3) → 6
lucky_sum(1, 2, 13) → 3
lucky_sum(1, 13, 3) → 1
lucky_sum(1, 13, 13) → 1
下面是我的解决方案。我不明白我的代码出了什么问题
def lucky_sum(a, b, c):
list1 = [a, b, c]
list2 = []
for x in list1:
if x is not 13:
list2.append(x)
return sum(list2)
您将在13之后返回值。如果达到13,则应跳出循环并返回总和。您的解决方案正确地忽略了数字中的13,但代码不遵守“…及其右侧的值不计算”的第二个要求。一旦你找到一个13,试着打破循环
编辑
顺便说一句,最具Python风格的解决方案是:
from itertools import takewhile
def lucky_sum(*args):
return sum(takewhile(lambda x: x != 13, args))
可以使用任意数量的参数,并且非常容易理解。您的代码以您的方式修复:
def lucky_sum(a, b, c):
list1 = [a, b, c]
list2 = []
for x in list1:
if x is not 13:
list2.append(x)
else:
break
return sum(list2)
以下是我对这个问题的回答:
def lucky_sum(a,b,c):
总计=a、b、c
新列表=[]
我总共:
如果i==13:
打破
其他:
新列表。附加(i)
返回金额(新列表)
不是你问题的一部分,但如果13不在列表1中,我会做[sum(列表1)否则sum(列表1[:list1.index(13)]]