ユーニックス総合研究所

  • home
  • archives
  • if-python-and

Pythonのif文で「and」を使う方法【初心者向け】

  • 作成日: 2022-03-27
  • 更新日: 2023-12-26
  • カテゴリ: Python

出来る人はPythonのif文で「and」をこう使う

Pythonではif文を使うことができますが、if文の条件式を書く必要があります。
条件式には「and」を使うことができます。

いわゆる「プログラミングちょっと出来る人」はこの条件式の書き方も普通とは違っています。
今回はif文での「and」の使い方と、出来る人のandの書き方を解説します。

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
形態素解析で代名詞+助詞+名詞を文章から抜き出す【Python, 自然言語処理, Janome】
在宅・未経験、Pythonで稼ぐ方法は?【取引・宣伝・広告】

「and」とは?

Pythonのandは演算子の一種です。
andの左側と右側を演算します。

左側のオペランド and 右側のオペランド  

左型と右側がともに真ならを返します。
左側と右側のどちらかが偽ならを返します。

print(1 and 1)  # 1  
print(True and True)  # True  
print(True and 1.23)  # 1.23  

print(1 and 0)  # 0  
print(0 and False)  # 0  

↑の演算を見るとわかりますが、andが返すのはオペランド(項)のどれかです。
1 and 1」では「1」を返してます。
True and True」では「True」を返します。

では「True and 1.23」ではどうなるのかと言うとandは「1.23」を返します。
True1.23はどちらも真ですが、andは両方が真だった場合は右側のオペランドを返します。

偽の場合はどうでしょうか。
1 and 0」では「0」が返ってきます。
いっぽう「0 and False」でも「0」が返ってきます。
andは結果が偽だった場合は偽を返しますが、その時に左側あるいは右側の偽になっているオペランドを返します。
左側が偽だった場合は左側のオペランドを返します。

andと関数

andと関数の呼び出しを見てみます。
たとえば↓のような演算です。

def f1():  
    print('f1')  
    return False  

def f2():  
    print('f2')  
    return False  


print(f1() and f2())  

これの結果は

f1  
False  

になります。
この動作を見るとandの振る舞いがわかります。

andは左のオペランドから評価しますが、左のオペランドが偽だった場合は右のオペランドは評価していないのがわかります。
つまり左側のf1()が偽だったら、右側のf2()は実行されないということです。

これはandは両側のオペランドのどちらかが偽だったら偽を返すわけなので、偽を得たらその時点で他の評価は必要なくなるからですね。

2つ以上のand

andは2つ以上つなげることができます。

print(1 and 2 and 3)  # 3  

↑のように3つのオペランドに対してandは2つで済みます。

カッコを使ったand

式ではカッコ内の式が優先されます。
そのため↓のような式では

print(1 and (2 and 3))  

先に「(2 and 3)」が計算されます。
これの結果は「3」で真になります。

次に「1 and 3」が計算されます。
この結果も「3」で真です。

if文とandの組み合わせ方

if文は条件式が真だったら、if文の中の処理を実行します。

if 条件式:  
    何か処理  

この条件式の部分にはandを使った式を書くことができます。
たとえば↓のようにです。

if 1 and 2:  
    print('真です')  

1 and 2」の結果は真(2)になります。
そのためif文の条件式の結果は真になるので、if文内の処理が実行されます。

条件式の結果が偽の場合は、if文の処理は実行されません。

if 1 and 0:  
    print('真です')  

↑のコードを実行しても何も出力されません。
if文にelseを繋げている場合はelse内の処理が実行されます。

if 1 and 0:  
    print('真です')  
else:  
    print('偽です')  

↑のコードを実行すると↓の結果になります。

偽です  

elifを繋げている場合はelifの条件式が計算されます。

if 1 and 0:  
    print('if')  
elif 2 and 3:  
    print('elif')  
else:  
    print('else')  

↑のコードを実行すると↓の結果になります。

elif  

↑のif文では最初にif文の「1 and 0」が計算されます。
これの結果は偽になるので、if文の処理は実行されません。
次にelifの条件式が評価されます。
2 and 3」の結果は真になるので、elifの処理が実行されます。

よって出力結果は「elif」になります。

if文の詳しい使い方については↓の記事で解説しています。

出来る人のandの使い方

いわゆる「プログラミングちょっと出来る人」は、コードについて工夫をします。
これは彼らのホビー、趣味なのです。
彼らは常に良いコードを書こうと思っています。

その結果の1つが今回ご紹介するテクニックです。

普通の人はif文でandを↓のように使うと思います。

if 1 and 2 and 3:  
    print('真です')  

確かにこれは間違いではありません。
コードは期待した動作をします。

しかし、いわゆる「プログラミングちょっと出来る人は」はこんな工夫をしました。

all_ok = 1 and 2 and 3  
if all_ok:  
    print('真です')  

all_okという変数を作り、そこに式の結果を代入しました。
そしてその変数をif文で使います。

こうすると何が嬉しいのでしょうか?
コード量が増えている気がするし、メリットはなんでしょう?

このようなif文では変数がコメントの役割をしてくれます。
たとえば最初のif文に↓のようなコメントを書いておいたとします。

# 全ての値が真なら  
if 1 and 2 and 3:  
    print('真です')  

いっぽう改善した書き方では↓のようになっています。

all_ok = 1 and 2 and 3  
if all_ok:  
    print('真です')  

これはall_okという変数を見れば、式が表す内容がわかります。
一般に「1 and 2 and 3」という式は、何を期待する式なのかよくわかりません。
しかしall_okという変数を作っておけば、その式が何を期待し何を表現しているのかわかるわけです。

if文の条件式が長くなってしまった場合はこのような工夫をしてみるとコードが見やすくなるかもしれません。

おわりに

今回はいわゆる「プログラミングちょっと出来る」人のif文とandの使い方を解説しました。
if文でandを使う機会は多いですが、この記事を呼んでおけばバッチリですね。

🦝 < if文とandで世界を構築しよう

🐭 < 次はorを見て見てね