if文とは
if文とはプログラム上の制御構造の一つで、ある条件分岐を用いるときに使われる構文です。
「もし~~なら~~を実行する」このように条件が変わるたびに実行を変化させたい時に用います。
制御構造とは
まず、制御構造について軽く説明しておきます。
python等のプログラミングでは、コードの上から順番に処理が行われていきます。
この時、処理を繰り返したり、条件が当てはまらなかったら実行を行わなかったりと、コードを制御する構文をまとめて制御構造と呼びます。
これから説明を行うif文も制御構造の一つです。
条件分岐とは
もし男なら「Aがおススメです」と出力して、もし女なら「Bがおススメです」と出力するなど、条件によって実行する内容を分岐させるという意味です。
簡単なif文を書いてみます
それではコードを用いてif文の書き方を説明していきます。
h = 1 if h == 1: print("1です")
この構文を日本語に翻訳すると、「もし、hが1なら、「1です」と出力する」となります。
if文の条件の書き方
if文は「if 条件:」と書きます。
条件には様々なパターンがありますが、先ほどのコードでは、
「h == 1」と書かれています。これは、hが1である時が条件となっています。
「==」と書かれていますが、これはpythonで「等しい時」に用いられます。
「=」と書き間違えないように気を付けましょう。
「=」は変数等に用いられ「A = B」BをAに代入する時等に用いられます。
インデントとブロック
先ほどのコードをもう一度見てみましょう。
h = 1 if h == 1: print("1です")
3行目の先頭が空白になっています。
これはインデントと呼ばれる、文字をずらして(字下げ)、コードを読みやすくする為に用いられる行為です。
しかし、pythonではこのインデントが非常に重要な役割をもっています。
他のプログラミング言語では{ }等を用いて、ブロックとして扱うのに対して、
pythonでは、同じインデントが使われている箇所をブロックとして扱います。
インデントにはルールが決められており、1レベルのブロックを作成するのに、インデントは「半角スペースを4つ」又は「tabキー1回」用います。
少し、ややこしく感じるかもしれませんが、これはテキストエディター等を用いると改行をすると同じインデントに合わしてくれたりするのでむしろ抜群に書きやすく、しかも読みやすいのです(^^♪
ブロックとは
条件を満たしたときに実行されるプログラムをまとめてブロックと呼びます。
すこしコードを変えてコチラを見てください
h = 1 if h == 1: print("1です") print("1なんです") print("ここは絶対表示されます")
1なんです
ここは絶対表示されます
この場合、インデントされている3行目と4行目がブロックとなります。
上記のコードの変数を2に変えてみると
h = 2 if h == 1: print("1です") print("1なんです") print("ここは絶対表示されます")
elseとは
次に「もし~~ではなかったら」の書き方を説明します。
ifの条件に当てはまらなかったら別のコードを実行する時には「else」を使います。
次のコードを見てみましょう。
h = 2 if h == 1: print("1です") else: print("1ではありません")
この場合、変数が「2」なので、ifの条件を満たしていません。
そこで、「else:」の条件を満たしたこととなり、「else」直下のブロックが実行されたわけです。
次に、条件分岐が複数ある場合を見てみましょう。
elifとは
elifとは、「else if」の略語で、ifとelseの間に条件を加える際に用います。
書き方はifやelseと同じです。
h = 2 if h == 1: print("1です") elif h == 2: print("2です") else: print("1でも2でもありません")
ifの条件は満たしていませんので、一つ目のブロックはスキップされます。
elifの条件を満たしているので、「2です」が出力されました。
elifはいくつも記載することができますが、
同じif文内で最初に条件を満たしたブロックのみ実行されます。
コチラのコードを見てみましょう。
h = 1 if h == 1: print("1です") elif h == 2: print("2です") elif h == 1: print("1なのに実行されません") elif h == 2: print("2なのに実行されません") else: print("1でも2でもありません")
passとは
条件を満たしたときに何も行わないときは「pass」を書いておきます。
h = 1 if h == 1: pass
pythonでは基本的に空のブロックを持つことができません。
if文の中で条件を満たしたときに何も処理を行わない時は「pass」を記載しないとエラーがでてしまいます。
補足
if文の条件には「==」だけでなく、比較演算や論理演算の条件を書くことも可能です。
比較演算や論理演算を使用したコードを書いておきます。
今はざっくりと頭の中にいれておきましょう。
h = 22 if h > 19: print("成人です") else: print("未成年です")
この式は変数が19より上なら条件を満たしている書き方です。
因みに「if h >= 20」と書くと20以上だと条件を満たすということになります。
詳しくは比較演算の項目で説明します。
h = 5 if h == 1 or 5: print("1か5です")
if文の基礎問題
if文の基礎問題です。出力結果を予測してください。
エラーが出る場合はエラーの予測をしてください。(インデントに関してのエラーはこの問題の中にありませんので、数えなくて大丈夫です。)
問1:
h = 1 + 1 if h == 2: print("2です")
- 答えを見る
- A:2です (hが2なので、ifの条件が満たされています)
問2:
h1 = 1 h2 = 2 if h1 + h2 == 3: print("3です")
- 答えを見る
- A:3です (条件を満たしているので実行されます)
問3:
h = 1 if h == 1: print("1です1") elif h == 1: print("1です2") else: print("1です3") if h == 1: print("1です4")
- 答えを見る
- A:1です1
1です4 (elifはifが満たされているので実行されませんが、二つ目のifは別のif文なので実行されます)
問4:
h = 1 if h == 1: pass elif h == 1: print("1です2") else: print("1です3") if h == 1: print("1です4")
- 答えを見る
- A:1です4 (elifが実行されそうですが、ifの条件が先に満たされており、passで何もしない命令が出されていますので、同じif文の中では何も実行されません)
問5:
h = "りんご" if h == "みかん": print("みかんです") else print("りんごです")
- 答えを見る
- A:エラー (elseの後に「:」をつけ忘れています。これはよく発生するエラーなので、if文でエラーが発生したら、インデントと「:」のつけ忘れをまず、疑いましょう)