我实际上正在编写关于编码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.我相信这很容易解决。
答案 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")