前回の記事でデータ構造について、リスト、タプル、セットといった種類とそれらの違いについて説明しました。
今回はいよいよプログラミングの本命である「制御構文」について書きたいと思います。
制御構文ってなんでしょうか
はい、ではそこから説明しましょうね。
- プログラミングにおける制御構文について
- Pythonでの条件分岐(if文)の使い方が分かる
制御構文とは何か
まず、制御構文とはプログラムの流れをコントロールすることです。
例えば、今までプログラムを見てきて分かると思いますが、プログラムは文を上から順に処理をしていきます。
ですが、複雑な処理が発生した場合に上から順に処理をしていくには限界があります。
プログラム処理の限界
例えば、あるクラスの生徒全員の名前とテストの点数をテキストに表示する場合にどうするでしょうか。
その場合に、生徒の名前とテストの点数をテキストに表示するという処理を1行1行人数分書くと、人数に比例してプログラム行数が増えます。
■生徒名 : 山田太郎
① 名前を表示する
② 国語の点数を表示する
③ 算数の点数を表示する
④ 理科の点数を表示する
⑤ 社会の点数を表示する
■生徒名 : 佐藤二郎
① 名前を表示する
② 国語の点数を表示する
③ 算数の点数を表示する
④ 理科の点数を表示する
⑤ 社会の点数を表示する
■生徒名 : 足立美沙
① 名前を表示する
② 国語の点数を表示する
③ 算数の点数を表示する
④ 理科の点数を表示する
⑤ 社会の点数を表示する
■生徒名 : 後藤洋子
① 名前を表示する
② 国語の点数を表示する
③ 算数の点数を表示する
④ 理科の点数を表示する
⑤ 社会の点数を表示する
↓
以下生徒数分、延々繰り返し
1クラスだけならこれで良いかもしれませんが、これが学校全体、市内の学校全体、県内の学校全体、日本の学校全体となるとそれこそ膨大な生徒数となり、とてもじゃないですがプログラムとして書けません。
また、生徒が男性だった場合はテキストAに表示し、女性だった場合はテキストBに表示するといった場合はどうでしょうか。
その場合、性別を判断する処理が必要になりますが、上から順に処理をするだけだと性別を判別する制御が出来ません。
■生徒は男性か女性か → 上から実施するだけだと、性別に応じて制御する処理が出来ない!
■生徒が男性
① 名前をリストAに表示する
② 国語の点数をリストAに表示する
③ 算数の点数をリストAに表示する
④ 理科の点数をリストAに表示する
⑤ 社会の点数をリストAに表示する
■生徒が女性
① 名前をリストBに表示する
② 国語の点数をリストBに表示する
③ 算数の点数をリストBに表示する
④ 理科の点数をリストBに表示する
⑤ 社会の点数をリストBに表示する
こういった複雑な処理をする場合に、例えば同じような処理であれば繰り返し処理をする仕組みや、プログラム上で判別して処理をするような仕組みが必要になります。
このように、複雑なプログラムに対し処理を制御する仕組みを制御構文と言います。
制御構文の種類
複雑なプログラムを制御しているのが「制御構文」なのですが、実はこの制御構文たった2つしかありません。
それが以下の2つです。
- 条件分岐 ・・・処理を分岐させるもの
- 繰り返し・・・処理を繰り返し実行させるもの
重要なのが、この2つを覚えるだけで複雑なプログラムを全て制御できるということです。
ちなみにPythonでは条件分岐はif文の1種類、繰り返しはfor文とwhile文の2種類の計3種類しかありません。
ですので、この3種類を覚えれば、Pythonの制御構文は全てマスターできます。
では、具体的に制御構文について見ていきましょう。
条件分岐とif文について
まずは「条件分岐」を見て見ましょう。
文字通り、条件によって処理を分岐するという構文で、プログラムでは「if文」と定義されます。
if文の使い方
では、if文の基本的な構文を見ていきましょう。
ifの後に条件を記載し、文末にセミコロン「:」をつけます。
そしてインデントを開けてifの条件に合う場合に実施する処理を記載します。
処理が複数行ある場合は、同じインデントを開けて処理を複数行記載します。
それからifの条件に合わない場合はelseと記載し、こちらも文末にセミコロン「:」をつけます。
そしてインデントを開けてifの条件に合わない場合に実施する処理を記載します。
処理が複数行ある場合は、同じインデントを開けて処理を複数行記載します。
例えば、整数の偶数か奇数を判定して、表示する文言を変える場合を考えて見ましょう。
n = 11
print(n,end = "")
if n % 2 == 0:
print("は偶数です。")
else:
print("は奇数です。")
上記の3行目で「if n % 2 == 0:」と書いてますが、nを2で割った時の余りが0の場合という条件を記載しています。
実際に変数nに代入された11は奇数ですので、このプログラムを実行すると以下となります。
11は奇数です。
複数の条件分岐
では条件分岐が複数あった場合はどうでしょうか。
その場合は「elif」を使って条件分岐を増やします。
例えば、1週間を表示するプログラムを書いてみましょう。
n = "Mon"
print("今日は",end="")
if n == "Sun":
print("日曜日です。")
elif n == "Mon":
print("月曜日です。")
elif n == "Tue":
print("火曜日です。")
elif n == "Wed":
print("水曜日です。")
elif n == "Thu":
print("木曜日です。")
elif n == "Fri":
print("金曜日です。")
elif n == "Sat":
print("土曜日です。")
else:
print("何曜日か分かりません。")
こちらも文字列を使った簡単なプログラムですが、3行目から各曜日をifとelifを使って分岐しています。
こちらも実施すると以下となります。
今日は月曜日です。
inを使った条件分岐
最後に条件の設定方法ですが、Pythonでは柔軟な条件の記載が可能です。
特にデータ構造を使ってそのデータ内に値が含まれている場合といった条件の指定が可能で、こういう条件の記載によってプログラムの記載がシンプルになります。
例えば、ある数字が素数がどうかを判定する場合ですが、プログラムでデータ構造のセットを使って以下のように記載が可能です。
pnum = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97}
n = 11
print(str(n) + "は",end="")
if n in pnum:
print("素数です。")
else:
print("素数ではありません。")
4行目の「if n in pnum:」で、数字nがセットpnumに含まれている場合という条件が設定できます。
上記を実行すると以下となります。
11は素数です。
まとめ
今回は、プログラムでの制御構文についての説明と、その具体例である条件分岐のif文についてPythonでの記載方法を説明いたしました。