2016-11-04 6 views
-8

これは私のコードで、3つの数字のうち2つだけが一致すると10を返しません。作業する3つの3つの番号があります。一致なし= 0,2一致= 10、すべて一致= 20の場合

def green_ticket_value(a, b, c): 
    if a != b or b != c or a != c: 
    return 0 
    elif a == b and a != c or b == c and b != a or a == c and a!= b: 
    return 0 
    else: a == b == c 
    return 20 
+5

と同じことを意味して

(b == c and b != a) or (a == c and a != b) 

a != bb != aは、まったく同じことを意味しますあなたの機能。打ち間違え? –

答えて

1

まず、2番目の「return 0」は「return 10」である必要があります。

第2に、(これは影響がある場合もありません)の場合、elif行にかっこが必要な場合があります。

def green_ticket_value(a, b, c): 
    if a != b or b != c or a != c: 
     return 0 
    elif (a == b and a != c) or (b == c and b != a) or (a == c and a!= b): 
     return 10 # NOT 0 
    else: a == b == c 
     return 20 
+0

はい、私もそう思っていました。彼が何をしようとしているのかを明確にしています(実際に起こっていることを確認しています)。 a == c、b == a、およびa == bは、 "a!= bまたはb!= cまたはa!= c"がfalseであるため、上記のステートメントは常にfalseであることに注意することは重要です。 – EJoshuaS

0

問題は最初のifステートメントロジックにあります。 andの代わりにorを使用しているため、2番目のステートメントを比較することはありません。 !あなたも別のを使用することができます

def green_ticket_value(a, b, c): 
    if a != b and b != c and a != c: 
    #rest of code 

:=したがって、bの有効な文であり、それは0
を返し、それがあるべきことは事実であるあなたの現在のコードでa=1b=2c=2 を想定し

カウンタを使用して最も一般的な値を返す方法

from collections import Counter 

def green_ticket_value(*args): 
    green = Counter(args) 
    values = {1:0,2:10,3:20} 
    return values[green.most_common(1)[0][1]] 
0

このように考えてみてください。

a != b or b != c or a != c 

が、その後、偽の場合

a == b and b == c and a == c 

DeMorgan's Laws

は、このようなケースである理由を説明します。 <->は、基本的には「互いに等価」という意味

~(A \/ B) <-> ~A /\ ~B 
~(A /\ B) <-> ~A \/ ~B 

は、~手段「ではない、」\/手段「または」、および/\手段ことを忘れないでください「と。」このコードを通過する

def green_ticket_value(a, b, c): 
    if a != b or b != c or a != c: 
     return 0 
    # It can *never* be the case that a != c or a != b at this point 
    elif a == b and a != c or b == c and b != a or a == c and a!= b: 
     return 0 // Should this be "return 10"? 
    # What did you mean to do here? 
    else: a == b == c 
     return 20 

それはあなたが常にfalseとなります

(a == b and a != c) or (b == c and b != a) or (a == c and a!= b) 

(== cを意味する

a == b and a != c or b == c and b != a or a == c and a!= b 

を意味するかどうかちょっと不明ですa == b、つまりこれらの条件のすべてが偽であることを意味します)、またはt彼は次のようにも常にfalseです

a == b and (a != c or b == c) and (b != a or a == c) and a!= b 

を(実際には、それはa == b && a != bが含まれているため、それが自己反論だ)か、他のいくつかの変種を意味します。私はを強くにしようとしていることをより明確にするために、ここでは父親の使用をお勧めします。

また、最後の部分のために:上記の文は何の `リターン10 'ではありません

a != b and (a == c or b == c) 
関連する問題