39032
```

    point=['c', 'b', 'd']
    if 'a' and 'b' and 'c' and 'd' in point:
        print(True)
    else:
        print(False)
    
```

リスト内にaがないのにTrueが出力されます。andの書き方について教えていただきたいです。
CC BY-SA 3.0
2017-10-25T16:45:08.053
39031
2017-10-27T08:00:31.873
25909
question
python
python でのandの使い方について
`point`にa, b, c, dが全て含まれるかを評価するにはset（集合）型を使った比較を行います。  
次のようなif文になります。

```

    if set(['a', 'b', 'c', 'd']) <= set(point):
        print(True)
    else:
        print(False)
    
```

<https://docs.python.jp/3.6/library/stdtypes.html?highlight=set#set-types-set-
frozenset>

x in y の場合 y に x が含まれるかの演算となり、質問の例の場合 `point` に 'd' が含まれるかの演算になります。  
<https://docs.python.jp/3/reference/expressions.html#in>

また演算子の優先順位が in, and の順ですので in が先に評価されます。  
<https://docs.python.jp/3/reference/expressions.html#operator-precedence>

```

    if 'a' and 'b' and 'c' and ('d' in point):
    -> if True and True and True and True:
    
```

と評価されるためTrueになっています。  
'a', 'b', 'c', ('d' in point) は全てTrueと評価されます。

if ('a' and 'b' and 'c' and 'd') in point: とした場合、('a' and 'b' and 'c' and 'd')
が先に評価され 'd' in point となり True になります。

```

    >>> ('a' and 'b' and 'c' and 'd')
    'd'
    
```
CC BY-SA 3.0
2017-10-25T18:44:56.660
39032
2017-10-27T08:00:31.873
2017-10-27T08:00:31.873
5375
5375
39031
answer
pythonの`and`演算子は左辺が`bool(左辺)`でTrueと評価されるとき右辺の値を、Falseのとき左辺の値を返します。

たとえば、`'a'`はTrueと評価されるため、`'a' and 'b'`は`'b'`となります。  
`''`はFalseと評価されるため、`'' and 'b'`は`''`となります。

質問の例ですと、

```

     'a' and 'b' and 'c' and 'd' in point
     -> 'a' and 'b' and 'c' and True
     -> 'b' and 'c' and True
     -> 'c' and True
     -> True
    
```
CC BY-SA 3.0
2017-10-26T01:13:51.890
39035
2017-10-26T01:13:51.890
25911
39031
answer