我正在尝试解决codingbat.com中的问题,问题名称是“ lucky_sum”

时间:2018-12-13 11:28:24

标签: python python-3.x algorithm

给出3个inta b c,返回它们的总和。但是,如果其中一个值为13,则它不计入sum,并且其右边的values不计。因此,例如,如果b13,则bc均不计算在内。例如:

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)

4 个答案:

答案 0 :(得分:1)

您要返回13之后的值。如果您达到13,则应该跳出循环并返回总和。

答案 1 :(得分:1)

您的解决方案正确地忽略了数字中的13,但是您的代码未遵守第二个要求“ ...及其右边的值不计数”。一旦找到一个13,就尝试break跳出循环。

修改

顺便说一句,最pythonic的解决方案是这样的:

from itertools import takewhile
def lucky_sum(*args):
    return sum(takewhile(lambda x: x != 13, args))

可以使用任意数量的参数,而且非常容易理解。

答案 2 :(得分:1)

您以自己的方式修正的代码:

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)

答案 3 :(得分:1)

这是我对此的回答:

def lucky_sum(a, b, c):
  total = a, b, c
  new_list= []
  for i in total:
    if i == 13:
      break
    else:
      new_list.append(i)
      return sum(new_list)