Pythonのif notで条件を満たさない場合の処理を書く方法

Python で if not 文は、「ある条件を満たさない場合」に行う処理を書くときに使います。

これを、if and や if or と組み合わせて使うと、「この条件は満たすけど、あの条件は満たさない場合」「複数の条件を同時に満たさない場合」など、様々な条件分岐を、素早く作ることができるようになります。

それ以外にも、「文字列やリストが空の場合」の処理なども個別に行うことができるようになります。

ぜひ、それぞれの使い方を確認しておきましょう。

Python の if 文の基本
if else 文の学習の前に「Pythonのif文を使った条件分岐の基本と応用」で、if 文の基礎を抑えておきましょう。

目次

1. if not 文は「条件を満たさない時」の処理に使う

if 文は、「もし ○○ という条件を満たす場合は、△△ という処理を行う」というものです。これに否定形が加わって、if not 文になると「もし ○○ という条件を満たさない場合は、△△ という処理を行う」というものになります。

ちょうど下図のような流れですね。

これを使うことで、if 文だけでは表せない条件を作ることができます。

以下の例をご覧ください。

In [1]:
'''randomモジュールのrandint関数の読み込み'''
from random import randint
  
'''実行の度にランダムに数値を返す'''
score = randint(0, 100)
 
''' if not 文'''
if not score <= 50:
    print(f"{score}点:合格")
else:
    print(f"{score}点:不合格")
43点:不合格

このコードの if 文は次のように書いています。

if not score <= 50:

これは、score が 50 点以下ではない場合に合格で、それ以外の場合は不合格となるコードです。このように、if not 文は、先に if not と書いてから条件式を書きます。最初は、not を書く場所に迷うかもしれませんので、覚えておいて下さいね。

2. if not と if and の組み合わせ

if not 文を、and や or と組み合わせると、さらに自由度の高い分岐条件を作ることができるようになります。

次の例をご覧ください。

In [1]:
'''点数を指定します。'''
math = 40
science = 100
 
'''if or 文は or で繋いだ条件を1つでも満たす場合に合格です。'''
if not math <= 50 and not science <= 50 and (math + science) >= 120 :
    result = "合格"
else :   #条件をどれか 1 つでも満たさない場合は不合格です。
    result = "不合格"
     
'''結果の出力'''
print(f"数学{math}点、科学{science}点、合計{math+science}点: <{result}>")
数学40点、科学100点、合計140点: <不合格>

このコードの条件式は次のように書かれています。

if not math <= 50 and not science <= 50 and (math + science) >= 120 :

if and 文は、「and で繋いだ条件を全て満たす場合」の処理を指定できるものでしたね(参照:「Pythonのif andで複数の条件を全て満たす場合の処理を一行で書く方法」)。

今回は、 if not 文なので

  • 数学:50 点以下(not math <= 50)
  • 科学:50 点以下(not science <= 50)
  • 合計点:120 点以下(not (math + science) <= 120)

という 3 つの条件を、「全て満たさない場合にのみ」合格となるプログラムになります。結果を見てみると、科学の点数と合計点は条件を満たしているのですが、数学のみ 40 点で条件を満たしていないため、「不合格」と判定されています。

3. if not と if or の組み合わせ

if and 文を if or 文に変えると結果は変わります。

以下をご覧ください。

In [1]:
'''点数を指定します。'''
math = 40
science = 100
 
'''if or 文は or で繋いだ条件を1つでも満たす場合に合格です。'''
if not math <= 50 and not science >= 50 or (math + science) >= 140 :
    result = "合格"
else :   #条件をどれか 1 つでも満たさない場合は不合格です。
    result = "不合格"
     
'''結果の出力'''
print(f"数学{math}点、科学{science}点、合計{math+science}点: <{result}>")
数学40点、科学100点、合計140点: <合格>

このコードの条件式は次のようになっています。

if not math <= 50 and not science >= 50 or (math + science) >= 140 :

if or 文は、「それぞれの条件のうち、どれか一つでも満たす場合」の処理を書くためのものでしたね(参照:「Pythonのif or でいずれか1つでも条件を満たす場合の処理を一行で書く方法」)。

そのため、このコードは、 and で繋いだ 2 つの条件、「数学が 50 点以下でないこと」、「科学が 50 点以下でないこと」を同時に満たす場合、または、それぞれの点数に関係なく、or で繋いだ条件である合計点が 140 点以上の場合に合格となるプログラムです。

結果を見てみると、数学が 40 点のため、最初の条件は満たしていません。しかし、合計点は 140 点で or で繋いだ条件を満たしているため合格と判定されています。

4. if not 文で「要素が空の場合」の処理を作る

ここまでは、if not 文で「ある条件を満たさない場合」の処理を作る方法を見てきました。

実は if not 文には、もう一つ便利な使い方があります。それが「要素が空の場合」の処理を書く時の使い方です。これを使いこなすには、Python の True と False の内部処理を知っておくと役に立ちます。

4.1. Python は True = 1 , False = 0 と判定する

Pythonでは True は 1, False は 0 として処理します。以下をご覧ください。

In [1]:
'''論理値 True は 1, 論理値 False は 0 です。'''
print(False + False) # 0 + 0
print(False + True) # 0 + 1
print(True + True) # 1 + 0
0
1
2

それぞれ False = 0, True = 1 として計算されていますね。

そして、以下の値は、Python 内の処理上、 0 と処理されます。これはつまり、 if 文では Falseと判定されることを意味します。

  • False
  • None
  • 数値の 0、 0.0、 0j
  • 空の値 “”、()、[]、{} 

この特徴を利用すると、「要素が空の場合」という条件分岐を作ることができます。

4.2. if not 要素が空のオブジェクトの例

次のコードをご覧ください。

In [1]:
'''空の変数 name を作ります。'''
name = "" # 空の文字列は False と判定されます。
 
'''if not 文'''
if not name: # not で name が空の時に True と判定されます。
    name = "匿名" 
print(name) 
匿名

これは、変数 name が空の時に「匿名」と入力するプログラムです。if 文に注目しましょう。

if not name:

これは name が False の時にという分岐条件です。name の値は空なので、if 文によって False と判定され指定の処理を行います。

空の文字列だけでなく、空のリストもタプルも辞書も False と判定されますので、if not 文でそれらだけに行う処理を指定することができます。また、数値の 0 や 0.0, 0j も同様です。

以下をご覧ください。

In [1]:
number = 0
if not number:
    number = 100
print(number) 
100

数値の 0 は False と同じ意味があるので、 if not 文で、0 の数値が入った変数だけに対する処理を描くことができます。

5. まとめ

まとめると if not 文には以下の 2 つの機能があります。

  • ある条件を満たさない場合という条件分岐を作る。
  • あるオブジェクトの要素が空の場合という条件分岐を作る。

特に、後者は、意外と知らない方も多いので覚えておくと良いでしょう。

また、if not と if or, if and を組み合わせると、通常は、何重にもネスティングして書かなければいけない条件分岐を、たった一行で表せるようになります。

しっかりと抑えておきましょう!



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメント一覧 (1件)

  • Pythonは初心者です。「not」の扱いが分からず、こちらに辿り着きました。お教えいただき、ありがとうございます。

    ところで、以下の箇所ですが、120点未満(not (math + science) < 120)でなく、120点以下になるのですか?

    if not math <= 50 and not science = 120 :

    合計点:120 点以下(not (math + science) <= 120)

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる