多个IF语句 - IF条件未满足后代码停止

时间:2013-07-17 17:50:47

标签: python

我实际上正在编写关于编码bat的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 个答案:

答案 0 :(得分: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

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


根据您的修改,上面的代码和您问题中的代码将无法用于编码蝙蝠问题。在您找到等于13的值时,您需要停止添加。

为此您可以修改原始函数,从sum块返回if,其值为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

答案 1 :(得分:2)

  

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

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

正确缩进return语句。

  

如果运行此lucky_sum(1,13,3),则返回1而不是4。

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

  

但是,如果其中一个值为13,那么它不计入总和,而右边的值不计算。

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

答案 2 :(得分: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语句体。正确地缩进,你确实会得到lucky_sum(1, 13, 3)中的4个(参见: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

答案 3 :(得分: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")