2020年12月27日
条件分岐,条件式
記事内容の出典:フリーテキスト「Python3入門」
このページの更新:2020/12/30
if 文
if 文を使うと,与えられた条件の判定結果によって,実行するプログラムを選択することができます.最も単純な if 文の書き方は次のようなものです.
if 条件式 :
条件式が成立する場合に実行するプログラム
「条件式が成立する場合に実行するプログラム」の部分は複数行記述することができます.
if 文を用いてBMI(ボディーマス指数)の判定をするプログラムの例を見てみましょう.
w = 50
h = 1.65
bmi = w / h**2
print('BMI:',bmi)
if bmi < 18.5:
print('痩せています.')
print('もう少しカロリー摂取してください.')
このプログラムでは,体重を変数 w に,身長を変数 h に設定し,それらの値からBMI値を算出して変数 bmi に与えています.そして変数 bmi の値が 18.5 未満の場合に,メッセージを表示する2行分のプログラムを実行します.この部分に注目すると,if の記述の位置よりも右に字下げ(インデント)されていることがわかります.しかも2行とも同じ字下げ位置(インデント位置)からはじまっていますが,条件成立時に実行するプログラムの部分は全て同じインデント位置から始まるように記述しなければなりません.
字下げ(インデント)には空白文字やTABなどを使用します.字下げの量は何文字でも構いませんが,実行対象のプログラムの部分は全て同じインデント量(空白文字の文字数)で揃えてください.(Google Colab.の場合はインデントは空白2文字が自動的に入力されます)
■ スイート(suite)
上の例で示したように,同じインデント量で揃えられた一連のプログラムの部分をスイート(suite)と呼びます.if 文以外の構文でも実行対象のプログラムをスイートの形で記述するので覚えておいてください.
さて,このプログラムを実行すると下のような出力が得られます.
BMI: 18.36547291092746
痩せています.
もう少しカロリー摂取してください.
さて,上のプログラムの1行目を w = 60 と書き換えて実行すると次のようになります.
BMI: 22.03856749311295
bmi < 18.5 という条件を満たさないため,2行分の print が実行されていません.if 文に与えられた条件式が成立しない場合に実行するスイートを次のように else: を用いて記述します.
if 条件式 :
条件式が成立する場合に実行するスイート
else:
条件式が成立しない場合に実行するスイート
この書き方を応用して先のプログラムを書き換えた例を次に示します.
w = 60
h = 1.65
bmi = w / h**2
print('BMI:',bmi)
if bmi < 18.5:
print('痩せています.')
print('もう少しカロリー摂取してください.')
else:
print('痩せていません.')
実行結果:
BMI: 22.03856749311295
痩せていません.
条件式が成立しない場合のスイートが実行されていることがわかります.
次に,複数の条件を次々と判定する形の if 文について説明します.上の例で bmi < 18.5 を満たさないケースがありましたが,その場合,更に bmi < 25 という判定をしたいとします.その場合は elif を用いて次のように記述します.
if 条件式1 :
条件式1が成立する場合に実行するスイート
elif 条件式2 :
条件式2が成立する場合に実行するスイート
else:
上のどの条件式も成立しない場合に実行するスイート
この書き方を応用して先のプログラムを書き換えた例を次に示します.
w = 60
h = 1.65
bmi = w / h**2
print('BMI:',bmi)
if bmi < 18.5:
print('痩せています.')
print('もう少しカロリー摂取してください.')
elif bmi < 25:
print('正常です.')
print('カロリー摂取量を維持してください.')
else:
print('太っています.')
print('カロリー摂取量を抑えてください.')
実行結果:
BMI: 22.03856749311295
正常です.
カロリー摂取量を維持してください.
更にこのプログラムの1行目を w = 70 と変更して実行してみましょう.
w = 70
h = 1.65
bmi = w / h**2
print('BMI:',bmi)
if bmi < 18.5:
print('痩せています.')
print('もう少しカロリー摂取してください.')
elif bmi < 25:
print('正常です.')
print('カロリー摂取量を維持してください.')
else:
print('太っています.')
print('カロリー摂取量を抑えてください.')
実行結果:
BMI: 25.71166207529844
太っています.
カロリー摂取量を抑えてください.
「elif 条件式:」の部分は必要に応じていくらでも記述することができます.
条件式と真理値
上の例では,数値の大小の比較に「<」という演算子を使いましたが,比較の結果,真理値という値が得られます.この真理値というものについて考えてみましょう.
条件判定の式 1 < 2 は正しい大小関係を表しているものですが,この式そのものをプログラムとして実行するとどのような値が得られるかやってみましょう.
1 < 2
実行結果:
True
このように True などという値が得られました.次に,正しくない大小関係の式 1 > 2 をプログラムとして実行してみます.
1 > 2
実行結果:
False
今度は False などという値が得られました.
真理値 True は命題論理の分野でいうところの「真」を意味する記号で,これは「正しい」ということを意味する記号だと考えてください.逆に,False は「偽」を意味する記号で,これは「正しくない」ということを意味する記号だと考えてください.
実際のプログラミングでは多くの場合,条件式は if 文などで条件判定をする際に記述しますが,実は条件式そのものも真理値という値を算出するわけです.
値の比較のためによく用いられる演算子を下の表に示します.
(表の出典:フリーテキスト「Python3入門」)
上の表に示した演算子を使った式は真理値を算出します.また,比較のための関係式以外でも,真理値を算出する式や関数,メソッドなどは全て,条件判定のための条件式として使用することができます.
比較演算の連鎖
比較のための演算子は1つの条件式の中で続けて使うことができます.例えば「1と4の間にある数かどうか」を判定する例を次に示します.
x = 3
1 < x and x < 4
実行結果:
True
これは「xが1より大きくかつ4より小さい」という条件式を意味します.
論理演算子による条件式の結合
先の例で「xが1より大きくかつ4より小さい」という条件式を挙げましたが,このかつという結合を and で表現することもできます.(次の例)
x = 3
1 < x and x < 4
実行結果:
True
同様に「もしくは」という結合や否定の表現も可能です.(下の表)
(表の出典:フリーテキスト「Python3入門」)
真理値以外のものを条件判定に使用するケース
条件式としては,基本的には真理値を返すものを用いますが,数値や文字列といった値も条件式として使用することができます.数値を条件式として与えた場合は,0以外なら真,0なら偽と判定されます.また,文字列を条件式として与えた場合は,空文字列以外なら真,空文字列なら偽と判定されます.(次の例)
# 試み1
v = 2
if v:
print('試み1:ゼロではありません.')
else:
print('試み1:ゼロです.')
# 試み2
v = 0
if v:
print('試み2:ゼロではありません.')
else:
print('試み2:ゼロです.')
# 試み3
v = '文字列'
if v:
print('試み3:内容があります.')
else:
print('試み3:内容がありません.')
# 試み4
v = '' # 空文字列(クオートのペアのみ)
if v:
print('試み4:内容があります.')
else:
print('試み4:内容がありません.')
実行結果:
試み1:ゼロではありません.
試み2:ゼロです.
試み3:内容があります.
試み4:内容がありません.
■ ヌルオブジェクト(None)の判定
Pythonにはヌルオブジェクトと呼ばれる特殊なオブジェクトがあります.このオブジェクトはプログラム中では None と表記し,「何もない」を意味します.今後のプログラミングにおいて,しばしば None が登場しますので覚えておいてください.
None を条件式として判定すると「偽」の扱いとなります.(次の例)
# 試み5
v = 3.14159265
if v:
print('試み5:内容があります.')
else:
print('試み5:内容がありません.')
# 試み6
v = None
if v:
print('試み6:内容があります.')
else:
print('試み6:内容がありません.')
実行結果:
試み5:内容があります.
試み6:内容がありません.
Python3 の基礎 − 超入門・再入門 −
【このカテゴリーの最新記事】
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10434033
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック