-3

我实际上正在研究编码蝙蝠的python。这是我遇到的问题:http ://codingbat.com/prob/p107863 。不确定问题是否真的出在他们身上。这是我的代码。它用于将所有不等于 13 的输入相加。可能有更好的方法来做到这一点。但是,我真正想知道的是,如果不满足前一个 IF 语句的条件,如何评估下一个 IF 语句。

def lucky_sum(a, b, c):
  results=0
  if a != 13: 
    results= results + a
  if b != 13: 
    results= results + b
  if c != 13: 
    results= results + c
  return results  #EDIT: Indented this 2 spaces to correct OP formatting error -sequoia

如果你运行lucky_sum(1, 13, 3)它,它会返回 1 而不是 4。我相信这很容易解决。

4

4 回答 4

6

编写函数的更好方法是使用non-keyword arguments. 只需sum()在生成器表达式上使用函数即可返回总和。

>>> def lucky_sum(*nkwargs):
...     return sum(x for x in nkwargs if x != 13)

>>> lucky_sum(1, 13, 3)
4

在您的原始代码中,存在indentation error问题。您的 return 语句没有正确缩进。


根据您的修改,上述代码和您问题中的代码不适用于 Coding Bat 问题。一旦找到等于 13 的值,就需要停止添加。

为此,您可以修改原始函数sumif块中返回 ,其中 value 为13。我将在这里对我的函数进行相应的修改:

>>> def lucky_sum(*nkwargs):
...     try:
...         index = nkwargs.index(13)
...         return sum(nkwargs[:index])
...     except ValueError:
...         return sum(nkwargs)

>>> lucky_sum(1, 3, 4)
8
>>> lucky_sum(1, 3, 13,  4)
4
于 2013-07-17T17:55:29.927 回答
2

我真正想知道的是如果不满足前一个 IF 语句的条件,如何评估下一个 IF 语句。

如果不满足 if 语句的条件,它将跳过缩进逻辑并移动到与 if 语句相等缩进的下一行,在这种情况下是另一个 if 语句。所以你的代码按预期工作。

只需正确缩进 return 语句。

如果你运行这个 lucky_sum(1, 13, 3) 它返回 1 而不是 4。

不对。您的代码返回 4,但它应该返回 1!你错过了这个问题:

但是,如果其中一个值是 13,则它不计入总和,并且其右侧的值不计入。

因此,如果值为 13,您也不想在其右侧添加值,您可以这样做。

于 2013-07-17T17:53:36.250 回答
1

我不相信发布的代码是您的真实代码。

def lucky_sum(a, b, c):
  results=0
  if a != 13: 
    results= results + a
  if b != 13: 
    results= results + b
  if c != 13: 
    results= results + c
return results #<--- This would result in an error

但是,在正确缩进返回的情况下,您的代码确实会独立于是否输入了前一个 if 语句主体来评估每个 if 语句。正确缩进,你确实会得到 4 个lucky_sum(1, 13, 3)(参见:http: //ideone.com/FIvEnk)。

但是,更好的方法是:

def lucky_sum(a, b, c):
    acc = 0
    for n in (a,b,c):
        if n != 13: acc += n
    return acc

您还可以使用语法获取可变数量的参数def lucky_sum(*some_args):。我留给你弄清楚如何在你的函数中使用它。

您的问题是您误解了您正在使用的教程网站:它要求您做与您所说的完全相反的事情,并且它想要您(错误地)说您的代码产生的结果,而不是您错误地相信的结果它想要。

以下代码符合他们要求的规范:

def lucky_sum(a, b, c):
    acc = 0
    for n in (a,b,c):
        if n == 13: break
        acc += n
    return acc
于 2013-07-17T17:56:33.447 回答
0

“但是,我真正想知道的是,如果前一个 IF 语句的条件不满足,如何评估下一个 IF 语句。”

答案是使用else和/或elif

if a != 13:
    print("a is not 13, but b and c might be")
elif b != 13:
    print("b is not 13, but a is, and c might be")
elif c != 13:
    print("c is not 13, but a and b are")
于 2013-07-17T19:15:41.847 回答