Pythonのif/else文、プログラミング学習の序盤で出会う基本中の基本ですよね!
でも、いざ使おうとすると「あれ?どう書くんだっけ?」「elifって何だっけ?」「インデントでエラーが出ちゃう…」なんて、手が止まってしまうこともあるかもしれません。
この記事では、そんなPythonの条件分岐、if文、else文、elif文の基礎から、ちょっとした応用テクニック、そして初心者がつまずきやすい落とし穴まで、しっかり解説していきます。
これを読めば、条件分岐のモヤモヤが晴れて、もっと自由にプログラムを操れるようになるはず!
この記事で学べること
- Pythonのif文、else文、elif文の基本的な書き方
- 条件分岐を使うとなぜ便利なのか
- 複数の条件を組み合わせる方法(ネスト、論理演算子)
- 条件分岐を一行で書くテクニック(三項演算子)
- 初心者がやりがちなミスとその対策
Pythonのif/else文とは?プログラミングにおける条件分岐の基本
プログラムを書いていると、「もし〇〇だったら、Aという処理をする。そうでなければ、Bという処理をする」みたいに、状況によって動きを変えたい場面がたくさん出てきます。
例えば、テストの点数を入力してもらって、80点以上なら「合格!」と表示し、それ未満なら「残念、もう少し!」と表示するプログラムを作りたいとしましょう。
こういう「もし~なら、〇〇する」という条件に応じた処理の切り替えを「条件分岐」と呼びます。
Pythonでは、この条件分岐を実現するために if
文、else
文、elif
文を使うんです。
if
は「もし~なら」という条件を指定する役割。
else
は「(ifの条件に当てはまらなかった)それ以外なら」という役割。
elif
は「(ifの条件には当てはまらなかったけど)もし別の~なら」という、追加の条件を指定する役割を持っています。
これらの出番がないプログラムなんて、ほとんどないと言っても過言ではありません!
まずは、条件分岐のイメージを掴むために、簡単な流れを見てみましょう。
▼ if文だけのシンプルな流れ +-------+ | Start | +---+---+ | V +---+---+ Yes +--------+ | 条件? +-----> | 処理 A | +---+---+ +--------+ | No | V V +-----+ +-----+ | End |<-------+ End | +-----+
条件が満たされた(Yes)ときだけ、特定の処理(処理A)が実行される流れですね。
なぜif/else文を学ぶ必要があるのか?その重要性とメリット
「if文とかelse文って、なんでわざわざ覚えないといけないの?」と思うかもしれませんね。
でも、条件分岐をマスターすると、作れるプログラムの幅がぐーーんと広がるんです!
例えば、
- ゲームで、プレイヤーの体力がある値以下になったらゲームオーバーにする
- Webサイトで、ログインしているユーザーとしていないユーザーで表示内容を変える
- 計算プログラムで、入力された値が0だったらエラーメッセージを出す
- データ分析で、特定の条件に合うデータだけを抽出して処理する
などなど、条件分岐はあらゆる場面で大活躍します。これが使えないと、本当に単純な、一本道のプログラムしか作れません。
逆に言えば、if elseを使いこなせれば、ユーザーの操作や状況に合わせて賢く動く、インタラクティブなプログラムを作れるようになるというわけです。
プログラミングの楽しさが格段にアップしますよ!
Pythonの基本的なif文の書き方と構文ルール
まずは、一番基本となる if
文の書き方から見ていきましょう。
Pythonの if
文は、次のような形で書きます。
if 条件式: 条件式が真 (True) のときに実行される処理 (ここの行はインデントする)
ポイントは3つ!
if
の後に「条件式」を書く
条件式は、結果が「真(True)」か「偽(False)」のどちらかになる式のことです。例えば、「score >= 80
」(scoreが80以上)とか「name == "Taro"
」(nameが"Taro"と等しい)みたいな感じです。ここで使う>=
や==
は比較演算子と呼ばれます。- 条件式の後にコロン
:
を付ける
忘れがちですが、if
文の行の最後には必ずコロン:
が必要です。 - 実行する処理の前に「インデント」を入れる
インデントとは、行頭に入れる「字下げ」のことです。Pythonでは、このインデントによって処理のまとまり(ブロック)を表現します。半角スペース4つを入れるのが一般的で、Pythonを書くためのエディタならTabキーを押すと自動でスペース4つが入る設定になっていることが多いです。このインデントがずれているとエラーになるので注意しましょう!
if文の簡単なサンプルプログラムと実行結果
百聞は一見にしかず!簡単なサンプルコードを見てみましょう。
変数 age
の値が20以上だったらメッセージを表示するプログラムです。
age = 25 if age >= 20: print("あなたは成人です。") print("プログラムを終了します。")
# ソースコードの表示結果 あなたは成人です。 プログラムを終了します。
age
は25なので、age >= 20
という条件は真(True)になります。そのため、if
文の次の行の print("あなたは成人です。")
が実行されました。
最後の print("プログラムを終了します。")
は if
文のブロックの外(インデントされていない)にあるので、条件に関係なく実行されます。
もし、age = 18
のように変えて実行すると、age >= 20
は偽(False)になるので、print("あなたは成人です。")
は実行されず、「プログラムを終了します。」だけが表示されるはずです。試してみてくださいね!
if/else文で「そうでなければ」の処理を追加する
if
文だけだと、「条件に合わなかった場合にどうするか」は指定できませんでした。
そこで登場するのが else
です!「もし~でなければ」の処理を追加できます。
if 条件式: 条件式が真 (True) のときに実行される処理 (インデントする) else: 条件式が偽 (False) のときに実行される処理 (インデントする)
if
の条件が成り立たなかった(偽、Falseだった)場合に、else:
に続くブロックの処理が実行されます。
else:
の後にもコロン :
が必要で、処理の前にはインデントが必要です。
これで、「もしAならXする、そうでなければYする」という、より一般的な条件分岐が書けるようになりますね!
▼ if-else文の流れ +-------+ | Start | +---+---+ | V +---+---+ Yes +--------+ | 条件? +-----> | 処理 A | +---+---+ +--------+ | No | V | +--------+ | | 処理 B | <-------+ +--------+ | V +-----+ | End | +-----+
if/else文のサンプルプログラムと実行結果
では、if else
を使ったサンプルを見てみましょう。
数値が偶数か奇数かを判定するプログラムです。
数値を2で割った余りが0なら偶数、そうでなければ奇数と判定できますね。
number = 7 if number % 2 == 0: # % は余りを計算する演算子 print(f"{number} は偶数です。") else: print(f"{number} は奇数です。")
# ソースコードの表示結果 (number = 7 の場合) 7 は奇数です。
number
が7の場合、number % 2
は 1 になるので、number % 2 == 0
という条件は偽(False)です。
そのため、else:
以下の処理が実行され、「7 は奇数です。」と表示されました。
もし number = 10
にして実行すれば、number % 2 == 0
が真(True)になるので、if
以下の処理が実行されて「10 は偶数です。」と表示されるはずです。条件によって実行されるブロックが変わるのがポイントです。
elif文で複数の条件分岐をスマートに書く方法
「もしAならX、そうでなくもしBならY、それ以外ならZ」のように、選択肢が3つ以上ある場合はどうすればいいでしょうか?
if
と else
だけだと、else
の中にさらに if else
を書く…といった入れ子構造になって、ちょっと読みにくくなってしまいます。
そんな時に便利なのが elif
です!
elif
は "else if" の略で、「前の if
や elif
の条件には当てはまらなかったけど、もし今回の条件に当てはまるなら」という意味合いです。
if 条件式1: 条件式1が真 (True) のときに実行される処理 elif 条件式2: 条件式1が偽 (False) で、条件式2が真 (True) のときに実行される処理 elif 条件式3: 条件式1, 2が偽 (False) で、条件式3が真 (True) のときに実行される処理 else: 全ての条件式が偽 (False) のときに実行される処理 (elseは任意)
書き方のルールは if
や else
と同じです。
elif
の後に条件式を書き、最後にコロン:
をつけます。- 実行する処理の前にはインデントを入れます。
elif
は、if
の後、else
の前に、いくつでも追加できます。- 最後の
else
は、どのelif
の条件にも当てはまらなかった場合の処理で、省略することも可能です。
ポイントは、条件が上から順番にチェックされ、最初に真(True)になったブロックの処理だけが実行されるということです。
たとえ、それ以降の elif
の条件も真(True)になったとしても、実行されるのは最初の一つだけです。
▼ if-elif-else文の流れ +-------+ | Start | +---+---+ | V +---+---+ Yes +--------+ | 条件1?+-----> | 処理 A | --+ +---+---+ +--------+ | | No | V | +---+---+ Yes +--------+ | | 条件2?+-----> | 処理 B | --+ +---+---+ +--------+ | | No | V | +--------+ | | 処理 C | <-----------------+ +--------+ | V +-----+ | End | +-----+
elif文を使ったサンプルプログラムと実行結果
成績(点数)に応じて評価を表示するプログラムを if
, elif
, else
を使って書いてみましょう。
- 80点以上なら「素晴らしい!」
- 60点以上80点未満なら「いいね!」
- それ以外(60点未満)なら「もう少し頑張ろう!」
score = 75 if score >= 80: print("素晴らしい!") elif score >= 60: print("いいね!") else: print("もう少し頑張ろう!")
# ソースコードの表示結果 (score = 75 の場合) いいね!
score
が75の場合、
- 最初の
if score >= 80:
は偽(False)です。 - 次に
elif score >= 60:
が評価されます。75は60以上なので、真(True)です。 - 条件が真になったので、
elif
ブロック内のprint("いいね!")
が実行されます。 - ここで条件分岐の処理は終了し、
else
ブロックは実行されません。
もし score = 90
なら最初の if
が真になり「素晴らしい!」が表示され、score = 50
なら if
も elif
も偽なので最後の else
が実行されて「もう少し頑張ろう!」が表示されます。試してみると動きがよくわかりますよ。
if/else文を深く理解するネスト(入れ子)構造の使い方
if
文の処理ブロックの中に、さらに if
文を書くこともできます。
これを「ネスト」とか「入れ子構造」と呼びます。
例えば、「ユーザー名が合っていて、かつ、パスワードも合っている場合」のような、段階的な条件チェックに使えます。
if 条件式A: # 条件式AがTrueの場合の処理 if 条件式B: # 条件式AもBもTrueの場合の処理 (インデントが深くなる) else: # 条件式AがTrueで、BがFalseの場合の処理 else: # 条件式AがFalseの場合の処理
ネストを使う際の注意点は、インデントがどんどん深くなることです。
インデントを間違えるとエラーになりますし、あまりネストが深くなりすぎると、コードがどこで何をしているのか分かりにくくなってしまいます。
3段階以上の深いネストは、なるべく避けるように工夫できると良いコードになります。(例えば、後で学ぶ関数を使ったり、条件式を工夫したりします)
ネストしたif/else文のサンプルと注意点
簡単なログイン処理の例を見てみましょう。
ユーザーIDとパスワードが両方とも正しい場合だけ「ログイン成功」と表示します。
user_id = "testuser" password = "password123" input_id = "testuser" input_pass = "password123" if input_id == user_id: print("ユーザーIDは一致しました。") if input_pass == password: print("パスワードも一致しました。") print("ログイン成功!") else: print("パスワードが違います。") print("ログイン失敗...") else: print("ユーザーIDが違います。") print("ログイン失敗...")
# ソースコードの表示結果 (ID, Passともに正しい場合) ユーザーIDは一致しました。 パスワードも一致しました。 ログイン成功!
このコードでは、まず外側の if
でユーザーIDをチェックし、IDが合っていた場合のみ、内側の if
でパスワードをチェックしています。
インデントの階層(深さ)が処理の所属を表している点に注目してくださいね。
もし input_pass = "wrongpass"
に変えて実行すると、「ユーザーIDは一致しました。」の後に「パスワードが違います。」「ログイン失敗...」と表示されます。
注意点として、インデントを間違えると IndentationError
というエラーが出ます。例えば、内側の if
のインデントがずれていると正しく動きません。Pythonではインデントが文法の一部なので、常に気を配るようにしましょう。
if/else文と論理演算子andやornotを組み合わせる応用テクニック
ネストを使わなくても、複数の条件を組み合わせて判定したい場面があります。
そんな時に役立つのが「論理演算子」です!
よく使う論理演算子は次の3つです。
and
: 左右の条件式が両方とも真(True)の場合に、全体として真(True)になる。(「かつ」の意味)or
: 左右の条件式のどちらか一方でも真(True)の場合に、全体として真(True)になる。(「または」の意味)not
: 後ろに続く条件式の真偽(True/False)を反転させる。(「~でない」の意味)
これらを if
文や elif
文の条件式の中で使うことで、より複雑な条件を簡潔に書くことができます。
例えば、先ほどのログイン処理の例は and
を使って次のように書けます。
user_id = "testuser" password = "password123" input_id = "testuser" input_pass = "password123" if input_id == user_id and input_pass == password: print("ログイン成功!") else: print("ユーザーIDまたはパスワードが違います。") print("ログイン失敗...")
input_id == user_id
と input_pass == password
の両方が真(True)のときだけ、if
ブロックが実行されます。ネストを使うよりもスッキリしましたね!
or
の例も見てみましょう。休日(土曜日または日曜日)だったら「お休みです」と表示するケース。
day = "Sunday" if day == "Saturday" or day == "Sunday": print("今日はお休みです。") else: print("今日は平日です。")
not
は条件を反転させます。例えば「変数 is_error
が偽(False)だったら」という条件は if not is_error:
のように書けます。
これらの論理演算子を使いこなすと、条件分岐の表現力が格段に上がりますよ!
【発展】Pythonの条件分岐を1行で簡潔に書く三項演算子
簡単な if else
文なら、もっと短く1行で書ける方法があります。
それが「三項演算子(条件演算子)」です。
基本的な書き方はこうです。
真の場合の値 if 条件式 else 偽の場合の値
例えば、「変数 age
が20以上なら "adult"、そうでなければ "child" という文字列を変数 status
に代入したい」場合、通常の if else
ならこう書きます。
# 通常の if else age = 25 if age >= 20: status = "adult" else: status = "child" print(status) # 結果: adult
これを三項演算子で書くと、こうなります。
# 三項演算子を使用 age = 25 status = "adult" if age >= 20 else "child" print(status) # 結果: adult
たった1行で書けて、とてもスッキリしましたね!
条件によって変数に入れる値を変えたり、関数の引数に条件に応じた値を渡したりする場合に便利です。
ただし、注意点もあります。
処理内容が複雑になったり、条件式が長くなったりすると、逆に1行に詰め込みすぎて読みにくくなることもあります。
あくまで、単純な分岐を簡潔に書きたい場合に使うのがおすすめです。可読性とのバランスを考えて使いましょう。
Pythonのif/else文の注意点と解決策
if else
文は基本ですが、慣れないうちはいくつか間違いやすいポイントがあります。
エラーが出ると焦ってしまいますが、よくあるパターンを知っておけば大丈夫!
ここでは、代表的なつまずきポイントとその対策を見ていきましょう。
インデントエラーを防ぐための具体的なコツ
Pythonで最もよく遭遇するエラーが IndentationError
かもしれません。
これは、インデント(字下げ)が正しくない場合に発生します。
【原因】
if
,elif
,else
の後の処理ブロックのインデントがされていない。- インデントの深さ(スペースの数)がブロック内で揃っていない。
- 全角スペースがインデントに使われている。(インデントには必ず半角スペースを使う!)
- スペースとタブ文字が混在している。(エディタの設定でタブをスペースに自動変換するのがおすすめ)
【対策】
if
,elif
,else
のコロン:
の次の行からは、必ずインデント(半角スペース4つ推奨)を入れる。- 同じブロック内の処理は、必ず同じ深さのインデントにする。
- コードエディタのインデント支援機能(自動インデント、インデントの可視化など)を活用する。
- エラーメッセージ
IndentationError: expected an indented block
やIndentationError: unindent does not match any outer indentation level
が出たら、エラー箇所周辺のインデントを注意深く見直す。
# 悪い例 (IndentationError) age = 20 if age >= 20: print("成人") # インデントがない! # 悪い例 (IndentationError) if age >= 20: print("成人") print("おめでとう") # インデントの深さが違う! # 良い例 if age >= 20: print("成人") print("おめでとう") # インデントを揃える
インデントはPythonの文法の一部!と肝に銘じて、常に意識するようにしましょう。
比較演算子のイコール「==」と代入のイコール「=」の間違いあるある
条件式の中で「値が等しいかどうか」を比較したいのに、うっかり代入の =
を使ってしまうのも、初心者がよくやるミスです。
【原因】
- 比較演算子
==
(等しい) と代入演算子=
(変数に値を入れる) を混同している。
【対策】
if
文などの条件式の中で「等しいか?」をチェックしたい場合は、必ずイコールを2つ重ねた==
を使う。=
は変数に値を代入するときだけ使う、としっかり区別する。
# 悪い例 (エラーになるか、意図しない動作をする) age = 20 if age = 20: # = は代入!比較は == print("20歳です") # 良い例 age = 20 if age == 20: # == で比較する print("20歳です")
この間違いは、エラーにならずに気づきにくい場合もあるので、特に注意が必要です。「条件式の中では ==
!」と覚えておきましょう。
他にも、コロン :
のつけ忘れ (SyntaxError: invalid syntax
) などもありがちなので、エラーが出たら慌てずにメッセージを読んで、原因を探ってみてくださいね。
【まとめ】Pythonのif/else文をマスターして次のステップへ進もう!
お疲れ様でした!Pythonの条件分岐 if
, else
, elif
について、基本的な使い方から応用、注意点まで一通り見てきました。
今回のポイントをまとめておきましょう。
if 条件式:
で条件分岐を開始する。- 条件に合わなかった場合の処理は
else:
で書く。 - 複数の条件分岐は
elif 条件式:
で追加できる。 - コロン
:
とインデント(字下げ)が超大事! if
文の中にif
文を入れるネストも可能(深くしすぎないように注意)。and
,or
,not
の論理演算子で複雑な条件も書ける。- 簡単な分岐は三項演算子
真の値 if 条件 else 偽の値
で1行に書ける。 - インデントエラーと
==
と=
の間違いに気をつける。
if else
はプログラミングの土台となる考え方です。これが分かれば、プログラムに様々な判断をさせることができるようになり、作れるものの幅が格段に広がります!
さあ、条件分岐をマスターしたあなたは、次に何に挑戦しますか?
- 同じ処理を繰り返す「ループ処理」(
for
文,while
文) - 処理をまとめて名前をつける「関数」(
def
) - 複数の値をまとめて扱う「リスト」
これらを学んでいけば、さらにパワフルなプログラムが作れるようになりますよ。
まずは、今回学んだ if else
を使って、身の回りのちょっとした判定プログラムなど、簡単なものから実際に作ってみるのがおすすめです。
【関連記事】 「Pythonとは?」に答える最初の一歩
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。