0

CodingBat で Python を練習しています。そこには、次のような質問があります。

3 つの int 値 abc を指定すると、それらの合計が返されます。ただし、値の 1 つが別の値と同じである場合、合計にはカウントされません。

そして私の答えは:

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

しかし、実行すると、1 つのケースを除いて OK と表示されます。それはdef long_sum(3,3,3)です。しかしif a==b and a==c、最初のチェックに書き込むと、すべてが問題ないことを示しています。

なぜこれが起こっているのですか?なぜelif a==b and a==c最初の小切手に書く必要があるのですか?

4

3 に答える 3

3

ifandelifステートメントは順番に実行され、前のステートメントのいずれかが true でない場合にのみ実行されます。最初のチェックでabが等しいことがわかり、 が返されますc。を返したくない場所でaとが等しい場合がある場合は、最初にこれらをキャッチする必要があります。bc

于 2013-03-21T16:05:10.620 に答える
0

よりpythonicな方法:3つ以上の引数で動作し、次の場合は1つで動作します:

def lone_sum(*args):
    return sum(i for i in args if args.count(i) == 1)

sum はイテラブルを唯一の引数として取り、それらすべての合計を作成します。

itarable であるジェネレーターを作成します。

i for i in args if args.count(i) == 1

リストに一度だけ現れる args のすべての要素を与えるだけです

于 2013-03-21T16:21:51.727 に答える
0

cこの場合、a == bは満足しているので、すぐに戻ります。テストの順序を最も具体的なものから最も具体的でないものに並べ替える必要があります。

于 2013-03-21T16:04:49.840 に答える