28461

[code]

    if index != 2.356 or index != 2.36:
    
[/code]

現在上記のように、if文の後、条件を書いているのですが、うまく動作しません。  
”indexが2.356,2.36のどちらでもない場合”  
としたいです。どのように書けば上の文章のように記すことができるでしょうか.  
よろしくお願いいたします。


CC BY-SA 3.0
2016-08-24T05:21:04.703
28459
2016-08-24T06:18:12.983
2016-08-24T06:05:19.367
3054
13491
question
python
a、bのどちらでもない場合、という条件を指定したい


`or`ではなく`and`を使います。

`or` の場合 「～でないか ～でない」となって左論理式が真の場合真、左論理式が偽の場合右論理式が真になり論理式全体が常に真になります。


CC BY-SA 3.0
2016-08-24T05:35:25.927
28461
2016-08-24T05:35:25.927
5044
28459
answer


基本はBLUEPIXYさんの回答のように`and`を使うのがよいと思います。  
その他の方法として、

### 連鎖

[code]

    2.356 != index != 2.36
    
[/code]

大小の比較などではよく使うと思いますが、不等式でもこのように出来ます。

> 比較はいくらでも連鎖することができます。例えば x < y <= z は x < y and y <= z と等価になります。  
>  <http://docs.python.jp/3/reference/expressions.html#comparisons>

### 帰属

[code]

    index not in (2.356, 2.36)
    
[/code]

この場合、`index`の値が、`(2.356, 2.36)`というタプルに含まれているか調べています。  
比較対象が多かったり動的な場合によいと思います。

> 演算子 in および not in は、帰属 (membership) を調べます。 x in s の評価は、 x が s  
>  の要素であれば真となり、そうでなければ偽となります。 x not in s は x in s の否定 (negation) を返します。  
>  <http://docs.python.jp/3/reference/expressions.html#in>


CC BY-SA 3.0
2016-08-24T06:02:26.887
28462
2016-08-24T06:02:26.887
3054
28459
answer


浮動小数点数の単純等値比較は危険なので注意喚起しておきます。

[code]

    index=2.0;
    index+=3.0/10;
    index+=5.0/100;
    index+=6.0/1000;
    print index;
    print index==2.356;
    
[/code]

と言うコードを python 2.7.5 に食わせると、結果は

[code]

    2.356
    False
    
[/code]

となります。

コンピュータの中で使われている浮動小数点数の動作は、  
プログラマが勝手に期待している動作とは異なる挙動を示すことがあります。

上記比較の結果が `True` になってほしいのであればまた別の工夫が必要です。  
もし興味があれば別質問を投げていただけると幸いです。


CC BY-SA 3.0
2016-08-24T06:18:12.983
28464
2016-08-24T06:18:12.983
8589
28459
answer