求a、b、c的和,不计算重复值?
我正在CodingBat上练习Python。在那里,有一个问题是:
给定三个整数值,a、b、c,返回它们的和。但是,如果其中一个值和另一个值相同,那么这个值就不算在和里面。
我的答案是:
def lone_sum(a, b, c):
if a==b:
return c
elif a==c:
return b
elif b==c:
return a
elif a==b and a==c:
return 0
else:
return a+b+c
但是在执行时,除了一个情况外,其他都显示正常。这个情况是 def long_sum(3,3,3)
。但当我在第一次检查时写 if a==b and a==c
,它就显示所有都正常。
为什么会这样呢?为什么我需要在第一次检查时写 elif a==b and a==c
?
4 个回答
0
这是一种更符合Python风格的方法:可以处理超过三个参数,并且只用一个条件。
def lone_sum(*args):
return sum(i for i in args if args.count(i) == 1)
sum函数只需要一个可迭代的对象作为参数,然后会把里面的所有数字加起来。
我创建了一个生成器,这是一种可迭代的对象,使用的是
i for i in args if args.count(i) == 1
它只会返回在列表中出现过一次的所有参数元素。
0
在这种情况下,因为 a == b
这个条件成立,所以你立刻就返回了 c
。你应该把你的测试顺序调整一下,从最具体的条件开始,逐渐到最不具体的条件。
3
if
和 elif
语句是按顺序执行的,只有在前面的条件不成立时,才会检查后面的条件。首先会检查 a
和 b
是否相等,如果相等就返回 c
。如果有一些情况下 a
和 b
相等,但你不想返回 c
,那么你需要先处理这些情况。