Pythonを勉強するために本を買ったけど,積読してる.
if文を学んでるけど,elifとelseの違いがよくわからない.
図とかがあれば,理解しやすいのに.
そんな方が,条件分岐if文を理解した上で,繰り返し処理(while文やfor文)の学習に進むための記事です.
本記事の内容
これまでの記事では「順次処理」,すなわち,「処理を上から順番に一つずつ実行する」プログラムを学んできました.ここからは,「もし〜だったら」や「〜を繰り返す」などの処理をするプログラム,制御構造を学んでいきましょう.
if ,while ,および for 文などの制御構造や,関数やクラス定義は,「複合文」と呼ばれています.(本記事の中盤に複合文の解説を設けたので参照ください)本記事から数回に渡り,複合文を解説していきます.まずは,制御構文について簡単に解説し,条件分岐のif文についてこれまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.
制御構造とは
条件に応じて,処理を分岐したり,同じ処理を反復したりする構造です.
Pythonに限らず,コンピュータのプログラムは,次の3つの単純な構造の組み合わせで構成されています.
- 順次処理:処理を上から順番に一つずつ実行する.
- 分岐処理:条件によって処理を選択する .
- 反復処理:条件が満たされている間、処理を繰り返す.
これまでの記事では,主に順次処理を学んできましたね.今回はデータを検査して,条件に従った処理を行う分岐処理について学びましょう.
コード構造-ブロックとインデント
制御構文を学ぶ前に,文の構造を解説します.
- インデント
- ブロック
インデント
インデントは,実行文をグループにまとめる方法です.行頭から最初の文字までの空白です.空白文字4つ分を1つの単位とします.Tabまたは、半角スペース4つです.ただ,Jupyter NotebookやGoogle colaboratoryでは,改行と同時に自動的にインデントが入ります.
多くプログラミング言語では,波括弧や丸括弧,begin, endなどを使って,セクションをくぎります.一方で,Pythonでは,空白を使って,プログラムの構造を定義します.これは,Pythonが他のプログラミング言語と大きく異なるところです.
ブロック
インデントによって,プログラムコードを1つのまとまりにしたものです.「同じ深さの字下げ(インデント)」のまとまりを1つのブロックとして表します.処理されるコードはインデントによってコードブロックとして認識されます.
if文
条件式が成立した場合(True)のみ,与えられたブロックの処理が実行されます.言い換えると,「もし〜ならば〜を実行する.」です.
if文の書き方
ifに続いて半角スペースを挟んで,条件式の後にコロンをつけます.次のブロックに,条件式が成立した時の処理を記述します.
条件式が成立した時の処理
if文の使用例
age = 18 if age<20: print("お酒はハタチになってからやで")
age = 22 if age<20: print("お酒はハタチになってからやで")
x = int(input("月を入力:")) if x > 4 and x < 6: print("4~6月に残業せんほうがええで😁")
4~6月に残業せんほうがええで😁
seasoning = {"さ":"砂糖", "し":"塩", "す":"酢", "せ":"醤油", "そ":"味噌"} if type(seasoning ["さ"]) == str: print(seasoning ["さ"])
複合文
冒頭でも簡単に説明しましたが,複合文について引用します.使用例を学んだところなので,理解しやすいかと思います.
if 、 while 、および for 文は、伝統的な制御フロー構成を実現します。 try は例外処理および/または一連の文に対するクリーンアップコードを指定します。それに対して、 with 文はコードのかたまりの前後でコードの初期化と終了処理を実行できるようにします。関数とクラス定義もまた、構文的には複合文です。複合文は、一つ以上の '節 (clause)' からなります。節は、ヘッダと 'スイート (suite)' からなります。一つの複合文を成す各節のヘッダは、全て同じインデントレベルに置かれます。各節のヘッダは一意に識別するキーワード(この記事ではif, else, elif)で始まり、コロンで終わります。スイートは、節によって制御される文の集まりです。スイートは、ヘッダがある行のコロンの後にセミコロンで区切って置かれた一つ以上の単純文、または、ヘッダに続く行で一つ多くインデントされた文の集まりです。後者の形式のスイートに限り、さらに複合文をネストできます; 以下の文は、 else 節がどちらの if 節に属するかがはっきりしないなどの理由から不正になります:
if~else
条件式が成立した場合(True)に処理が実行されますが,成立しなかった場合(False)には,複数の条件で評価して処理が実行されます.
言い換えると,「もし(if)〜ならば〜を実行し,そうでなければ(else)〜を実行する」
if~elseの書き方
ifに続いて半角スペースを挟んで,条件式の後にコロンをつけます.次のブロックに,条件式が成立した時の処理を記述します.
さらに次のブロックに,else:と記述し,その次のブロックに,条件式が成立した時の処理を記述します.
条件式が成立した時の処理
else:
条件式が成立しない時の処理
if~elseの使用例
age = 20 if age<20: print("お酒はハタチになってからやで”) else: print(“年齢確認しました!”)
x = int(input("月を入力:")) if x > 4 and x < 6: print("4~6月に残業せんほうがええで😁") else: print("残業して稼いでもええんちゃう😁")
残業して稼いでもええんちゃう😁
複合データでも同様の処理が可能です.
seasoning = {"さ":"砂糖", "し":"塩", "す":"酢", "せ":"醤油", "そ":"味噌"} if type(seasoning ["さ"]) == list: print(seasoning ["さ"]) else: seasoning["さ"] = ["砂糖", "酒", "みりん"] print(seasoning)
if~elif~else
条件式が成立した場合(True)に処理が実行されますが,成立しなかった場合(False)には,複数の条件で評価して処理が実行されます.
言い換えると,「もし(if)〜ならば〜を実行し,そうでなくもし(elif)〜ならば〜を実行し…そうでなければ(else)〜を実行する」です.
if~elif~elseの書き方
条件式①が成立した時の処理
elif 条件式②:
条件式②が成立した時の処理
elif 条件式③:
条件式③が成立した時の処理
.
.
.
else:
条件式が成立しない時の処理
elifを複数設けて分岐できます.
if~elif~elseの使用例
x = int(input("月を入力:")) if x = 4: print(“転職おめでとう😁") elif x > 4 and x < 6: print("4~6月に残業せんほうがええで😁") else: print("残業して稼いでもええんちゃう😁")
残業して稼いでもええんちゃう😁
dict_ex1 = {"one": 1, "two": 2, "three": "3", "four": 4, "five": 5} if type(dict_ex1["one"]) == str: dict_ex1["one"] = int(dict_ex1["one"]) print(dict_ex1) elif type(dict_ex1["two"]) == str: dict_ex1["two"] = int(dict_ex1["two"]) print(dict_ex1) elif type(dict_ex1["three"]) == str: dict_ex1["three"] = int(dict_ex1["three"]) print(dict_ex1) elif type(dict_ex1["four"]) == str: dict_ex1["four"] = int(dict_ex1["four"]) print(dict_ex1) elif type(dict_ex1["five"]) == str: dict_ex1["five"] = int(dict_ex1["five"]) print(dict_ex1) else: print("全部数値です.")
song = "い〜つの日〜か〜 I'll be there" if "Hey Hey Hey" in song: print("時には起こせよムーブメント") elif "Yeh, yeh, yeh, yeh, Wow, wow, wow, wow" in song: print("Survival dance") elif "La la la ..." in song: print("CAN YOU CELEBRATE?") else: print("Don't wanna cry")
if文について,基本を学べましたでしょうか?
次は反復処理の「for文とwhile文」について学びましょう!
最後まで読んでくださり,ありがとうございます☺️