こんにちは、ナナです。
「分岐」とはプログラムが進む道を切り替えることためのものです。「分岐」によりプログラミングでできることがグンと広がります。
本記事では次の疑問点を解消する内容となっています。
では、if文を使った「分岐」の使い方を学んでいきましょう。
Pythonによる分岐:if文の書き方(基本編)
師匠!プログラムでは「分岐」によって進む道を切り替えることができますよね。もちろん「Python」にも分岐ってあるんでしょ?
「分岐」というのはプログラミングの3大要素である「順次」「分岐」「反復」の中の1つだからね、必ず存在するよ。
Pythonにも「if文」が用意されています。でも、C言語とは少し書き方が違うから注意が必要だよ。
皆さんが生活をしていく中で「もし●●だったら、〇〇をしよう」といったことはよくあるシーンです。
このように「もし●●のとき」というシーンは、「分岐」というシーンなのです。
プログラムにおいても「分岐」のシーンを書くことができます。
if文の書き方と使い方
Pythonにおいて分岐は「if文」という構文を使って表現します。プログラムでは次のように記述します。
Pythonのif文の書き方
if 条件式:
条件が成立したときに行う処理①
条件が成立したときに行う処理②
「もし●●だったら〇〇をする」において、●●の部分を条件式と呼びます。
具体的な書き方をプログラムで示しましょう。
# 信号が「赤」の状態である
signal = "赤"
# もし信号が「赤」なら止まろう
if signal == "赤":
print("危ないから止まる")
print("青になるまで待つ")
まずは、この書き方が一番の基本になります。条件式の後ろにはコロン「:」が必要になりますよ。よく見て、書き方を覚えてください!
条件式で使う比較演算子
条件式の●●の部分は「もし 信号 が 赤 だったら」のように、「何かが どのような状態 だったら」という意味のプログラムで表現します。
このような状態を判断するためには「比較演算子」を利用します。代表的な比較演算子は、次のものです。
比較演算子 | 呼び方 | 条件式の書き方 | 条件式の意味 |
< | 小なり | if A < B: | AがBより小さいとき |
<= | 小なりイコール | if A <= B: | AがB以下のとき |
> | 大なり | if A > B: | AがBより大きいとき |
>= | 大なりイコール | if A >= B: | AがB以上のとき |
== | イコール | if A == B: | AとBが等しいとき |
!= | ノットイコール | if A != B: | AとBが等しくないとき |
AとBを比較した結果、条件が成立すれば「True」、成立しなければ「False」という真偽値に変化します。
代入を示す「=」と、等しいことを示す「==」は最初の頃は間違えて書いてプログラムが正しく動かないことがよく起きます。
皆さん、この2つは違うものですからね、注意しましょう!
比較演算子を使ったプログラム例
「もし、値段が1000円未満なら買う」のような場合も次のように表現できます。
# 値段を800円に設定
price = 800
# 値段を判断して買うかを決める
if price < 1000:
print("安いから買った!")
price変数の中身は800円が入っています。
条件式として「800 < 1000」として比較されるため結果は「真:True」となり、「安いから買った!」が表示されます。
比較演算の結果は「真偽値」に変化するという実験
真偽値というのは「真:True」「偽:False」です。『比較演算の結果が真偽値になる』ということが、あまりピンとこない人もいるでしょう。
次のように、print命令の中で条件式を書くと実際にそうなっているのがわかります。
print(100 == 100) # 比較演算の結果が真
print(100 == 200) # 比較演算の結果が偽
結果は次のように表示されます。
True
False
「100 == 100」という比較演算は成立するため、真偽値の「真:True」に変化します。その内容がprint命令で画面に出力されています。
これが『比較演算子の結果が真偽値に変化する』ということです。
Pythonに限らず、プログラミング言語の比較演算の結果は「真偽値」に変化します。
インデントを使って実施するべき処理を表現する
『インデント』とは、字下げのことです。
Pythonにおいてif文の条件が成立したときの処理は、『インデント』を使って書く必要があります。
『インデント』は空白4つ分のスペースですが、キーボードの[TAB]キーを使って入れます。
インデントを付けるときの注意事項
『インデント』を付けるときには、次のルールがあることに注意しましょう。
必ず、タブを使って縦のラインを揃えましょう。
他の言語においてもインデントによる字下げというのは、プログラマーにとっては非常に基本的な技術なんです。でも、初心者はなかなか正しくインデントを付けることができないことも多いです。
Pythonはインデントを使ってプログラミングを制御するため、自然とインデントの扱い方を身に付けることができます。
重要:Pythonはインデントによって『ブロック』を表現する
Pythonではインデントによって『ブロック』というものを表現しています。
これはものすごく大事なことです。この『ブロック』は必ず頭に叩き込んでください!
本記事で紹介する「if文」では、条件が成立したときに行うべき処理は、『ブロック』というカタマリを作ることによりPythonは認識しています。
C言語では、次のように『ブロック』を{}を使って表現します。
C言語による『ブロック』の表現方法
if (signal == 1)
{
printf("危ないから止まる\n");
printf("青になるまで待つ\n");
}
Pythonでは、この{}による『ブロック』を、インデントを使って表現するのです。
そのため、インデントの表現の違いはブロック範囲の違いとなります。
C言語のブロックは{}の中の処理でインデントがずれていても問題ありませんが、Pythonではインデントのずれがブロック範囲の違いとなることに注意が必要なのです。
Pythonではインデントにより『ブロック』を意識するため、正確にインデントを書かないとプログラムが意図したとおりに動きません。
if文に限りませんが、今後はこの『ブロック』を使って処理を作っていきます。そのため、『ブロック』というカタマリを強く意識してプログラミングしましょう!
if文を使った多分岐の書き方:if-elif-else文
師匠!ここまでのif文は「もし●●だったら、〇〇する」ですよね。「そうじゃなかったら△△する」みたいな場合もありますよね。
こんな場合の分岐はどうやったら書けるんですか?
そうだね。分岐の種類にはいろいろなパターンがあるよね。if文はプログラムの中で頻繁に使われるから、しっかりと使い方を学ぼうね!
ここまでに紹介したif文は単純な分岐でした。図で表現すると次のようになります。
if文を使った多分岐の書き方
Pythonにおいて分岐は「if文」という構文を使って表現します。プログラムでは次のように記述します。
if-else文の書き方
if 条件式:
条件が成立したときに行う処理
else:
条件が成立しないときに行う処理
if-elif-else文の書き方
if 条件式:
条件が成立したときに行う処理
elif 条件式:
条件が成立したときに行う処理
else:
条件が成立しないときに行う処理
※else文の記載は省くことが可能であるが、書く場合は必ず最後に置く必要がある。
if-else文は次のような分岐を作りたい時に利用します。条件が成立しない場合にも処理を行うことができます。
if-elif-else文は、複数の分岐を作りたい時に利用します。elif文は複数記述することができるため、4つ5つといった分岐も作ることができます。
多分岐を使ったプログラム例
具体的なプログラム例を示しましょう。
天気を示す「weather」変数に天気を入れておくと、持ち物と注意事項をお知らせするプログラムです。
weather = "晴" # 晴 雨 雪
if weather == "晴":
print("サングラスをかける")
print("注意:日焼け")
elif weather == "雨":
print("傘を広げる")
print("注意:水はね")
elif weather == "雪":
print("長靴を履く")
print("注意:転倒")
else:
print("持ち物なし")
print("注意:なし")
このように「elif」を複数個並べることもできます。
分岐の条件式を複数並べる方法
師匠!ではでは、分岐を複数並べるのではなく、『条件式を複数並べたい』ときはどうやって書くんですか?これも書き方があるんでしょ!
もちろんあるね。そんな時は論理演算子を使うよ。C言語と使う考え方は同じだけど、書き方が違うから注意しようね。
「もし●●かつ▲▲のとき、〇〇したい」といったように、条件に「複数の条件を同時に満たす」や「複数の条件のいずれかを満たす」といった複合パターンもあることでしょう。
そのようなときに使うのが『論理演算子』です。論理演算子を使うと複数の条件式を組み合わせることができます。
論理演算子の種類
論理演算子には次のものがあります。
論理演算子 | 呼び方 | 使い方 | 全体が「真」になるための条件 |
or | 論理和 | if 条件式1 or 条件式2: | 条件式1か2のどちらかが真なら「真」 |
and | 論理積 | if 条件式1 and 条件式2: | 条件式1と2のどちらも真なら「真」 |
not | 否定 | if not 条件式: | 条件式が真でなければ「真」 |
よく利用されるのは「論理和」と「論理積」ですね。
論理演算子を使ったプログラム
次のように「”晴” で “昼” のとき」や「”雨” または “雪” のとき」のように、複数の条件式を組み合わせることもできます。
weather = "晴" # 晴 雨 雪
time = "昼" # 朝 昼 夜
if weather == "晴" and time == "昼":
print("サングラスをかける")
print("注意:日焼け")
elif weather == "雨" or weather == "雪":
print("傘を広げて長靴を履く")
print("注意:水はねと転倒")
else:
print("持ち物なし")
print("注意:なし")
論理演算子もプログラムの中ではよく利用されます。必ず習得しておきましょう!
if文のインデント調整方法
C言語でも使いますけど『インデント』って一般的に空白4つ分なんですよね。でも「タブ」キーを利用すると1回で入力できるから便利です。
そうだね。Pythonという言語はインデントを使ってプログラム構造を表現します。だから、インデントを素早く調整できることって作業効率に直結するんだね。
Pythonでは「if文」に限らずですが、プログラム構造をインデントを使って表現します。
そのため、インデントを入れたり、取り除いたりすることが頻繁に発生します。
エディタのインデント調整機能を使おう!
プログラムを編集するためのツールのことを『エディタ』と呼びます。Windowsに付属する「メモ帳」もエディタのひとつです。
インデントを入れたり取り除く時に、非常に便利な機能がエディタには備わっています。
インデントの調整でよくあるのが、「複数の行に対してインデントを入れたい、取り除きたい」というケースです。
PyCharmのエディタ上で行を複数選択してから、[TAB]キーを使って次の操作をしてみてください。
複数行のインデントを、一括で左右にずらすことができましたね。これはすごく便利な機能なので、知っておくとよいでしょう。
[SHIFT]キーはキャンセルする意味合いでよく使われるんです。だから[TAB]と合わせて使うとインデントを削除できるんです。
PyCharmに限らず多くのエディタでは、この機能を持っています。1行1行調整していると大変ですから、この機能はすごく便利ですよ。
Q&A:Pythonのif文の分岐に関するよくある質問
「分岐」に関する質問どうぞー!
Q:分岐でよくあるswitch文は使えるの?
C言語では「分岐」の方法でswitch文もありましたよね。Pythonにももちろんあるんですよね?紹介してくださいよ!
C言語を含めいろいろな言語で使うことのできるswitch文ですが、Pythonにはありません。残念っ!
switch文は変数の値をもとに処理を分岐させるための方法ですが、Pythonでは利用できません。そのためif文を使って分岐することになります。
dice = 4 # サイコロの目
if dice == 1:
print("・")
elif dice == 2:
print("・・")
elif dice == 3:
print("・・・")
elif dice == 4:
print("・・・・")
elif dice == 5:
print("・・・・・")
elif dice == 6:
print("・・・・・・")
Pythonでは、if-elif文を使ってひとつひとつの条件を書くしかありません。
Q:分岐でよくある三項演算子は使えるの?
Pythonでは『switch文』が使えない…。
じゃあじゃあ、『三項演算子』はどうなんですか?これもないんですか?
三項演算子はPythonにも用意されているんですよ。ただ、C言語などの他の言語と比べると、癖が強いので慣れないと使いづらいですよ。
Pythonには三項演算子が用意されています。次のように書きます。
Pythonの三項演算子の書き方
条件式が真のときの値 if 条件式 else 条件式が偽のときの値
number = 6
result = "偶数" if number % 2 == 0 else "奇数"
print(number, result)
6 偶数
ifの左側に真のときの値を書くというのが、かなり違和感を感じますね。どうしてこんな言語仕様にしたのでしょうかね。不思議です。
Q:インデントが空白に自動的に変換されている?
師匠!気づいたんですよ。「タブ」を打ち込むと空白4つ分のスペースになりますが、本当に空白4つなんです。「タブ」が「タブ」じゃないんです。
「PyCharm」のエディタでは「タブ」を本当の空白4つへ自動変換する機能が動きます。
みなさん、PyCharmで[TAB]キーを打ち込んでみてください。空白4つ分のスペースに変換されているのがわかることでしょう。
課題:「分岐」の使い方が学べたかを確認しよう
もしも、プログラムが上手く動かなくて困ったときは、答えを見るのではなく「デバッガ」の使い方を学びましょう。
この記事を見ると問題の解決技術が身に付きます。困ったときのオススメ記事です!
課題1:分岐を使って偶数と奇数を判別しよう
課題内容
- 変数「number」を作成し、代入された数値が「偶数」か「奇数」かを表示せよ。
- 表示内容は出力期待結果に従い出力すること。
出力期待結果
numberに「36」の偶数を代入していた場合
偶数: 36
numberに「17」の偶数を代入していた場合
奇数: 17
剰余算を行う「%」を使うことで偶数と奇数を判別することができます。
number = 32 # 偶数の数字
#number = 17 # 奇数の数字
if number % 2 == 0:
print("偶数:", number)
else:
print("奇数:", number)
剰余算を使った偶数・奇数判定は、代表的な分岐プログラムですよ!
課題2:点数によってメッセージを切り替えよう
課題内容
- 点数を管理する変数「score」を作成し、点数によって評価メッセージを表示せよ。
- 評価メッセージは次の表に従い判断せよ。
- 表示内容は出力期待結果に従い出力すること。
点数 | 出力する評価メッセージ |
100 | 満点です |
99~80 | よくできています |
79~30 | 次回に向けてかんばりましょう |
29~0 | 赤点のため補習を受けましょう |
その他 | 不正がありました |
出力期待結果
点数: 100 満点です
点数: 80 よくできています
点数: 30 次回に向けてかんばりましょう
点数: 0 赤点のため補習を受けましょう
不正がありました
論理和のandを使った範囲を判定するためのプログラムです。
score = 100 # テストの点数
if score == 100:
print("点数:", score, "満点です")
elif score >= 80 and score <= 99:
print("点数:", score, "よくできています")
elif score >= 30 and score <= 79:
print("点数:", score, "次回に向けてかんばりましょう")
elif score >=0 and score <= 29:
print("点数:", score, "赤点のため補習を受けましょう")
else:
print("不正がありました")
実はこのプログラムは、次のように書くこともできます。
score = 100 # テストの点数
if score == 100:
print("点数:", score, "満点です")
elif 80 <= score <= 99:
print("点数:", score, "よくできています")
elif 30 <= score <= 79:
print("点数:", score, "次回に向けてかんばりましょう")
elif 0 <= score <= 29:
print("点数:", score, "赤点のため補習を受けましょう")
else:
print("不正がありました")
違いがわかりますか? 一部を取り出して比較してみましょう。
elif score >= 80 and score <= 99: # 書き方その1
elif 80 <= score <= 99: # 書き方その2
「書き方その2」は、andを簡素表記にしたものです。
この書き方は人の目には直感的でわかりやすい書き方ですね。このような
課題3:うるう年を判別しよう
課題内容
- 西暦を管理する変数「year」を作成し、うるう年かによってメッセージを表示せよ。
- メッセージは次の表に従い判断せよ。
- 表示内容は出力期待結果に従い出力すること。
うるう年の判定の結果 | 出力するメッセージ |
うるう年のとき | うるう年です |
うるう年でないとき | 平年です |
うるう年の判定
西暦が4で割り切れる年は閏年である。
ただし、西暦が100で割り切れて400で割り切れない年は平年である。
出力期待結果
2000 年:うるう年です
2019 年:平年です
2020 年:うるう年です
2100 年:平年です
if文の中にif文を書くこともできます。インデントをしっかりと意識してプログラミングしましょう。
year = 2100 # 西暦
if year % 4 == 0:
if year % 100 == 0 and year % 400 != 0:
print(year, "年:平年です")
else:
print(year, "年:うるう年です")
else:
print(year, "年:平年です")
うるう年のプログラムができれば、基本的なif文の使い方はOKでしょう!
C言語技術者が知るべきPython言語との違い:「分岐」
すでにC言語を習得している人は、次のポイントに気を付けよう!
Pythonではインデントを使ってブロックを表現します。インデントをしっかりと意識してプログラミングする必要があることに注意しましょう。
switch文がなかったり、三項演算子の書き方も少し違うため扱う際には注意が必要です。