0

我正在 CodingBat 上练习 Python。在那里,一个问题是:

给定 3 个 int 值 abc,返回它们的总和。但是,如果其中一个值与另一个值相同,则不计入总和。

我的回答是:

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

3 回答 3

3

ifandelif语句按顺序执行,并且仅在前面的语句之一不成立时才执行。第一次检查发现ab相等,然后返回c。如果在某些情况下ab不想 return c,则需要先捕获这些情况。

于 2013-03-21T16:05:10.620 回答
0

在这种情况下,您将c立即返回,因为a == b很满意。您应该将测试从最具体到最不具体重新排序。

于 2013-03-21T16:04:49.840 回答
0

只是一种更 Pythonic 的方式:使用 3 个以上的 args 和 1 个如果:

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

它只给出在列表中只出现一次的 args 的所有元素

于 2013-03-21T16:21:51.727 回答