No.028【Python】複数の比較演算子による連結記述について

![python-logo-master-v3-TM-flattened.png](https://qiita-image-store.s3.amazonaws.com/0/336067/8fb9f6aa-57f7-dc4b-b4bf-a648969d315c.png)

####「複数の比較演算子による連結記述」について書きます。
I'll write about "Consolidated description in python" on this page.

###■ 比較演算子を使った比較を連結により記述することが可能
&emsp;You can describe values by linking comparisons with comparison operator.

####■ 複数の比較を連結した場合<br>&emsp;・「a < x < b」は、が「and」で連結された「a < x and x < b」と等価である

```
>>> # 例①
>>> x = 20
>>> 
>>> print(10 < x < 30)
True
>>> 
>>> print(10 < x and x < 30)
True
>>> 
>>> x = 0
>>> 
>>> print(10 < x < 20)
False
>>> 
>>> print(10 < x and x < 20)
```

```
>>> # 例②
>>> x = 15
>>> 
>>> y = 25
>>> 
>>> print(10 < x < 20 < y < 30)
True
>>> 
>>> print(10 < x and x < 20 and 20 < y and y < 30)
True
>>> 
>>> x = 20
>>> 
>>> y = 45
>>> 
>>> print(10 < x < 30 < y < 40)
False
>>> 
>>> print(10 < x and x < 30 and 30 < y and y < 40)
False
```

####■連結した場合との違いについて
####・連結して記述した場合でも、各式は基本的に一度しか評価されない<br>&emsp; If the fomula were linked with others, each fomula only evaluate once. 


```
>>> def test(x):
	print('function is called')
	return(x)

>>> print(test(10))
function is called
10
>>> print(5 < test(10) < 20)
function is called
True
>>> 
>>> #ただし、andを使った場合、当該関数は、二度呼ばれる
>>> 
>>> print(5 < test(10) and test(10) < 20)
function is called
function is called
True
>>> 
>>> # X and Yでは、Xが偽(False)だとYは評価されないため、連結の有無問わず当該関数は一度しか呼ばれない
>>> print(10 < test(0) < 30)
function is called
False
>>> 
>>> print(10 < test(0) and test(0) < 30)
function is called
False
>>> 
>>> #上記結果は、前回の記事で紹介した短絡評価である
```



####■ 参考例① 数値の範囲(The range of numerical values)
####・数値の範囲を条件とする場合、比較の連結が便利である。
&emsp;Linking comparisons is convenient in case the condition is the range of numeric vaule.

```
>>> x = 20
>>> 
>>> if 5 < x < 10:
	print("result: 5 < x < 10")
else:
	print("result: x <= 5 or 10 <= x")

	
result: x <= 5 or 10 <= x
```

####■ 参考例② 複数の変数または式の等価であるのかを判定する<br>&emsp;Judge whether all multiple variables or equations are equal.
####・複数の変数・式がすべて等価であるかを判定する場合に便利である
&emsp;It is useful to judge whether all multiple variables or equations are equal.

```
>>> a = 5
>>> 
>>> b = 5
>>> 
>>> c = 5
>>> 
>>> if a == b == c:
	print('all equal')
else:
	print('not all equal')

	
all equal
>>> 
>>> #一つでも値が異なる場合は、偽(False)となる
>>> a = 5
>>> 
>>> b = 1
>>> 
>>> c = 5
>>> 
>>> if a == b == c:
	print('all equal')
else:
	print('not all equal')

	
not all equal
```
```
>>> # 値が等価でないときに、Trueを返す比較演算子「!=」を使うときは上記と異なる
>>> 
>>> a = 5
>>> 
>>> b = 10
>>> 
>>> c = 15
>>> 
>>> print (a != b != c)
True
>>> 
>>> a = 5
>>> 
>>> b = 5
>>> 
>>> c = 1
>>> 
>>> print(a != b != c)
False
>>> 
>>> a = 5
>>> 
>>> b = 1
>>> 
>>> c = 5
>>> 
>>> print(a != b != c)
True
>>> # 順番によっては、真(True)が返される
```
####・値の比較は、「== or !=」、オブジェクトの同一性を比較する場合は、「is or isnot」を使う
&emsp;Value comparison is used "==" or "!=", and also object identification is done "is" or "isnot"

```
>>> i = 5
>>> 
>>> print(type(i))
<class 'int'>
>>> 
>>> f = 10.0
>>> 
>>> print(type(f))
<class 'float'>
>>> 
>>> print(i == f)
False
>>> 
>>> print(i is f)
False
>>> # 値が等価の場合、==はTrueを返すが、オブジェクトは異なるため、isはFalseを返す
```

####・上記2つの判定(数値の範囲または複数の値の等価判断)以外で比較の連結を使うと、コードが読み取りづらくなる
&emsp;It might be difficult to read codes if you use the comparison for others except the range of numeric values and the equal judgement of multiple values.

#####いかがでしたでしょうか？
How was my post?

#####本記事は、随時に更新していきますので、<br>定期的な購読をよろしくお願いします。
I'll update my blogs at all times.
So, please subscribe my blogs from now on.

#####本記事について、<br>何か要望等ありましたら、気軽にメッセージをください！
If you have some requests, please leave some messages! by You-Tarin

#####また、「Qiita」へ投稿した内容は、随時ブログへ移動して行きたいと思いますので、よろしくお願いします。