2015-09-24 11 views
5

私はPythonでif文をコンパイルしようとしています。ここでは2つの変数をチェックして、< = .05かどうかを確認します。両方の変数がTrueの場合、単にコードを渡してやりたいだけですが、変数の1つだけがTrueであれば、コードで何かを実行します。例えば:Pythonの条件付きのどちらか一方または両方がありますが、両方はありません

ht1 = 0.04 
ht2 = 0.03 

if (ht1 <= 0.05) or (ht2 <= 0.05): 
    # do something 
else: 
    pass 

私はこの例では、ORの私の理解は、1つの条件がtrueを返した場合、または両方の条件がTrueを返すように私がそれを望むように動作するとは思いません。もし誰かが私を正しい方向に向けることを託すことができたら、それは大いに評価されるだろう。

+0

ブール値((HT1 <= 0.05))= BOOL((HT2 <= 0.05))場合は、このようなXOR演算何かを考えることができます! – csharpcoder

答えて

8

が「でない」関係:

if (ht <= 0.05) is not (ht2 <= 0.05): 

方法、これをifは、そのうちの1つがTrueで、もう1つがFalseである場合にのみ成功するということです。両方がTrueまたは両方がFalseの場合は、elseブロックに移動します。そうすることの

+1

は正しいが、微妙。関係式はブールを返す。 boolは、2つのシングルトンオブジェクトのうちの1つまたは2つです。「True」または「False」です。したがって、適切でないテストは「is not」です。個人的には '!='が好きです。 – nigel222

+1

@ nigel222それは少し微妙だと同意する;私は 'それは' bool'sの比較だという事実のために 'notである'だけを使用しました。それは私にこのように少し洗濯機を読むが、それは間違いなく味のことです。私の考えでは、 '!='は非常に異なる目的(つまり、論理演算子であっても数学的に見えるかもしれませんが)で、他の '<='比較の中で少し失われてしまいます。 – tzaman

+0

その説明をありがとう。私には、 '(ht1 <= 0.05)!=(ht2 <= 0.05)'の角括弧は '!='を区別しています。同意、味は物質ではない。 – nigel222

7

関係演算子は常にboolになりますので、それらが異なる値であるかどうかを確認してください。この場合には「等しくない」またはとして表すことができる「排他的論理和」と呼ばれる何がしたい

if (ht1 <= 0.05) != (ht2 <= 0.05): # Check if only one is true 
    ... 
0

ちょうど別の方法:

if max(ht1, ht2) > 0.05 and min(ht1, ht2) <= 0.05: 
3

それは二度の比較を計算する必要があるため、この方法は技術的には遅いですが、私はそれをもう少し読みやすい見つけます。あなたのマイレージは異なる場合があります。

ht1 = 0.04 
ht2 = 0.03 

if (ht1 <= 0.05) and (ht2 <= 0.05): 
    pass 
elif (ht1 <= 0.05) or (ht2 <= 0.05): 
    # do something. 
+0

+1フローを明確にするためです。ピジョン酸。 – wim

関連する問題