求a、b、c的和,不计算重复值?

0 投票
4 回答
1213 浏览
提问于 2025-04-17 19:53

我正在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

ifelif 语句是按顺序执行的,只有在前面的条件不成立时,才会检查后面的条件。首先会检查 ab 是否相等,如果相等就返回 c。如果有一些情况下 ab 相等,但你不想返回 c,那么你需要先处理这些情况。

撰写回答