首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写Bat python逻辑2问题3 Lucky_sum

编写Bat python逻辑2问题3 Lucky_sum
EN

Stack Overflow用户
提问于 2021-12-03 18:53:04
回答 5查看 1K关注 0票数 0

https://codingbat.com/prob/p107863

给出3个int值,a,b,c,返回它们的和。但是,如果其中一个值为13,则它不计算在和,而其右边的值不计算在内。例如,如果b是13,那么b和c都不算。

这是我的代码,怎么了?需要帮助

代码语言:javascript
复制
def lucky_sum(a, b, c):
    sum = a + b + c
    if a == 13:
        sum = sum - a - b
    if b == 13:
        sum = sum - b - c
    if c == 13:
        sum = sum - c
    return sum
EN

回答 5

Stack Overflow用户

发布于 2021-12-03 19:03:27

可能有些过分,但如果遇到或继续使用itertools.takewhile,可以继续对除13以外的值进行求和。这将概括为*args类型方法中的任意数量的参数。

代码语言:javascript
复制
from itertools import takewhile

def lucky_sum(a, b, c):
    return sum(takewhile(lambda i: i != 13, [a, b, c]))

一些例子

代码语言:javascript
复制
>>> lucky_sum(1, 2, 3)
6
>>> lucky_sum(1, 2, 13)
3
>>> lucky_sum(1, 13, 3)
1
票数 2
EN

Stack Overflow用户

发布于 2021-12-03 19:02:05

如果其中一个值为13,则不计算之和,其右边的值不计算

您的代码只处理13右边的即时值,但是规范表明您应该排除它右边的所有值。

代码语言:javascript
复制
def lucky_sum(a, b, c):
    sum = a + b + c
    if a == 13:
        sum = sum - a - b - c
    if b == 13:
        sum = sum - b - c
    if c == 13:
        sum = sum - c
    return sum

但是,如果您可以添加一个任意的数字,这就变得站不住脚了。相反,考虑一些可伸缩的东西:

代码语言:javascript
复制
def lucky_sum(*addends):
    sum_ = 0
    for n in addends:
        if n == 13:
            break  # stop summing immediately
        sum_ += n
    return sum_
票数 1
EN

Stack Overflow用户

发布于 2022-03-14 15:12:35

可以尝试这样做:

代码语言:javascript
复制
def lucky_sum(a, b, c):
  
  if a==13:
    return 0
  elif b==13:
    return a
  elif c==13:
    return a+b
  else:
    return a+b+c
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70219390

复制
相关文章

相似问题

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