この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。 hirocom777.hatenadiary.org 前回は、基本的なデータ操作について学んでみました。
今回からプログラムの神髄、制御構文について学んでいきたいと思います。
プログラムの3つの制御構造
たいていのプログラムは、以下の3つの制御構造から成り立っています。
- 順次処理 :処理を上から順番(記述順)に実行する。
- 選択処理 :条件の結果に応じて異なる処理を実行する。
- 反復処理 :条件を満たす間、同じ処理を繰り返し実行する。
Pythonによるプログラムも例外ではありません。このうち順次処理はコードを順番に記述するだけですので、込み入った構造にはなりません。これに対して選択処理、反復処理には用途に対応するための命令があります。
選択処理
まずは選択処理から見ていきましょう。
比較演算子
選択処理を行うには、選択のために何らかの判定をしなければなりません。この時に使用するデータ型がブール型です。ブール型は条件が正しい(True)か正しくない(False)かどちらかの値を取ります。2つの値を比較して、その結果を判定する場合に比較演算子を使用します。2つの値を比較演算子で挟んで使用します。
演算子 | 説明 |
---|---|
== | 2つの値が等しい場合にTrueを返す |
!= | 2つの値が等しくない合にTrueを返す |
< | 左の値が右の値より小さい場合にTrueを返す |
<= | 左の値が右の値以下の場合にTrueを返す |
>= | 左の値が右の値以上の場合にTrueを返す |
> | 左の値が右の値より大きい場合にTrueを返す |
in | 左の要素が右の要素に含まれる |
not in | 左の要素が右の要素に含まれない |
論理演算子
2つ以上の判定結果をもとに判定する場合には、and演算子、or演算子で判定結果を繋げて、その結果で判定します。また、判定結果を反転させたい場合はnot演算子を使用します。
演算子 | 説明 |
---|---|
and | 2つの値が両方ともTrueの場合にTrueを返す |
or | どちらかの値がTrueの場合にTrueを返す |
not | Falseの場合はTrue、Trueの場合はFalseを返す |
たとえば、変数xが10以上で、20より小さいかどうかを判定する場合には
10 <= x and x < 20
と書けます。またPythonでは上の条件を以下のように簡略化して書くこともできます。
10 <= x < 20
便利でわかりやすい記述方法ですね。
ブール値以外の型の判定
ブール型のデータはそのまま判定されるのですが、それ以外のデータ型は以下のように判定されます。
データ型 | TRUE | FALSE |
---|---|---|
数値 | 0以外 | 0 |
文字列 | 長さ1以上の文字列 | 空文字 |
リストなど | 要素が1つ以上存在 | 要素が0 |
if文
Pythonでは選択処理を記述する場合、if文を使うことが一般的です。以下のように記述します。
if 条件式: # 処理
条件式にはブール値を返す値、数式が記述されます。処理の部分に処理のスクリプトを記述するのですが、この部分はインデント処理をする必要があります。インデントされている部分がif文の対象となり、インデントを解除するとif文以降の処理になります。
この記述では判定結果で処理をする、しないの選択のみでした。複数の処理を選択するようにするには、elif文、else文を合わせて使用します。以下のように記述します。
if 条件式A: # 処理1 elif 条件式B: # 処理2 else: # 処理3
条件式AがTrueの場合は処理1、条件式AがFalseで条件式BがTrueの場合は処理2、条件式A、Bが共にFalseの場合は処理3が実行されます。以下は記述例です。
rank = 80 if rank >= 90: print('すごいですね') elif rank >= 75: print('がんばりましたね') elif rank >= 50: print('ギリギリでしたね') else: print('残念でしたね')
elif文は複数記述できます。else文を記述した後の判定は行わないので、必ず最後に記述しましょう。
その他の選択処理
JavaScriptやCではswitch文、VBAではSelect Case文など1つの式を複数の条件で評価する方法があるのですが、Pythonにはそのような構文はありません。全部if文で済ませちゃってます。バージョン3.10以降になるとmatch文なるものが追加されるのですが、ちょっと毛色が違うので、ここでは紹介しません。
次回は反復処理
いかがでしょうか。これらの制御構文を自在に使いこなせるようになれば、プログラムが楽しくなってきますね。次回も制御構文です。反復処理について学びま