< 前の記事 | | | Web講座TOP | | | 次の記事 > |
初心者向け Python講座 - 第8回「プログラムの分岐」
投稿者:3G 大毛
今回は if 文によるプログラムの分岐を勉強します。if 文を使うと一気にプログラミングらしくなります。お楽しみに!

if 文の書き方とインデント
「もし A ならば B する」のようなプログラムを書くには if を使って次のように書きます:
if A: B
if から B までの部分をまとめて if 文といいます。A にはTrueかFalseで評価できる式を書きます。B には、A がTrueのときだけ実行したい文をいくつか書きます。具体例を見たほうが早いでしょう。次のように入力してください。なお、2行目と3行目の先頭には空白を2個ずつ入れています。この通りに入力してください:
if 1+1==2: a = '1足す1は2です。' print(a)
この if 文はもし1+1が2に等しければ、「a = ~」の式とprint関数を実行します。
結果はprint関数が実行され「1足す1は2です」と表示されました。1+1は2に等しいからです。当然ですね。
今度は次のように入力してみます:
if 1+1==1: a = '1足す1は1です。' print(a)
この if 文はもし1+1が1に等しければ、「a = ~」の式とprint関数を実行します。はたして実行されるでしょうか?
結果は何も表示されませんでした。つまり、print関数は実行されていません。1+1は1ではないからです。
さて上の2つの例では、B の文の前にいくつかの空白が入っていました。この空白は「インデント」と言って重要な役割があります。Pythonではインデントの個数が同じ文をひとまとまりと考えます。
B の中に書く文はインデントをそろえて、元の if のある行より空白を多くしないといけません。
例えば、次のようにインデントをつけなかったり、インデントがそろっていないとエラーになります:
なお空白の個数は自由に決められますが、ふつうは2個ずつか4個ずつにします。この講座では2個ずつに統一します。
if 文を終わりにするには、インデントを元に戻せばOKです:
if 1+1==1: a = '1足す1は1です。' print(a) print('ここはif文ではありません。')
1+1は1ではないので if 文の中は実行されませんが、最後の行は if 文の外にあるので実行されました。
else を使った if 文
else を使うと、条件に当てはまらなかった場合に実行する文を書くことができます。「もし A ならば B する。そうでないなら C する。」のようなプログラムを書くには次のように書きます:
if A: B else: C
これも if 文といいます(if から C までが一つの if 文です)。B と C に書く文はそれぞれインデントをそろえます。そして、元の if のある行より空白を多くしないといけません。具体例で見てみましょう。年齢を入力すると(2022年4月以降の基準で)成人かどうかを判定するプログラムを書いてみます:
a = input('ねんれいはいくつですか?') if int(a)<18: print('あなたは未成年です。') else: print('あなたは成人です。')
何やら急にプログラミングらしくなって来ました。初めて出る関数が2つあるので、順番に解説していきます。
まず、input関数はキーボードからの入力を文字列データとして返します。「input('ねんれいはいくつですか?')」と書くとそのまま「ねんれいはいくつですか?」と表示され、すぐあとに入力エリアが出てきます。入力エリアに何か入力してEnterキーを押すと、その入力が文字列(str型)データとして返されます。
次に、「int(a)」の部分ですが、intのような型の名前を関数のようにカッコをつけて使うと、型の変換を行うことができます。例えば「int('10')」と書くと、Pythonは文字列 '10' をint型に変換しようとします。変換できれば int型のデータが返ってきます。変換できない場合はエラーになります。
もう一度先ほどのプログラムをおさらいしてみます。
a = input('ねんれいはいくつですか?') if int(a)<18: print('あなたは未成年です。') else: print('あなたは成人です。')
このプログラムを実行するとinput関数によって「ねんれいはいくつですか?」と表示され、すぐあとに入力エリアが出てきます。入力エリアに文字列を入れるとそれが a にバインドされます。a がint型の数に変換できて18未満なら、ifの後の文が実行され「あなたは未成年です。」と表示されます。そうでなければ、elseの後の文が実行され「あなたは成人です。」と表示されます。
それでは実際に実行して試してみましょう:
入力エリアに「17」と入力したところ「あなたは未成年です。」と表示され、「18」と入力したところ「あなたは成人です。」と表示されました。正しい動作です。
elif を使った複数の分岐
elif を使うと複数の分岐を持つ if 文を書くことができます。

「もし A ならば B する。そうでなく C ならば D する。そうでなく E ならば F する。そうでないなら G する。」のようなプログラムを書くには次のように書きます:
if A: B elif C: D elif E: F else: G
elif の部分はいくつあってもかまいません。また、else の部分はなくてもかまいません。具体例で見てみましょう。テストの成績を入力すると「A」から「D」の4段階で評価するプログラムを書いてみます:
a = input('テストは何点でしたか?') n = int(a) if n>=80: print('あなたはA評価です。') elif n>=70: print('あなたはB評価です。') elif n>=60: print('あなたはC評価です。') else: print('あなたはD評価です。')
80点以上は「A」、70点以上は「B」、60点以上は「C」、60点未満は「D」の評価とします。実際に動かしてみましょう:
正しい動作になりましたか?
if 文の入れ子
if 文の中に if 文を書くこともできます。次のプログラムはどのような動作をするでしょうか?考えてみてください:
a = input('さそり座ですか?') if a=='はい': b = input('女ですか?') if b=='はい': print('あなたはさそり座の女です。') elif b=='いいえ': print('あなたはさそり座です。') else: print('「はい」か「いいえ」で答えてください。') elif a=='いいえ': print('あなたはさそり座ではありません。') else: print('「はい」か「いいえ」で答えてください。')
このプログラムは「さそり座の女」かどうかを判定します。回答の仕方によって5通りの結果に分かれます。プログラムをコピー&ペーストして試してみて下さい。
ちなみに if 文に限らず、同じ種類のものが中に入っていることを「入れ子」と言います。

練習問題
次のうち好きなプログラムを作ってみてください:
(1) 入力された整数が偶数か奇数かを判定するプログラム
(※ 2で割った余りが0の整数を偶数といいます。そうでない整数を奇数といいます。余りの計算は第2回を復習しましょう。)
(2) 血液型(A型, B型, O型, AB型)を尋ねて占いをするプログラム
(3) 年齢と性別を尋ねて七五三の回数を判定するプログラム
(※ 七五三の行事は、女の子は3歳と7歳で1回ずつ行い、男の子は5歳で1回行うとします。)

◇ (1)の解答例 ◇ (※クリックして展開して下さい)
n = int(input('整数を入力してください:')) if n%2==0: print('偶数です') else: print('奇数です')
◇ (2)の解答例 ◇ (※クリックして展開して下さい)
a = input('血液型は何型ですか?') if a=='A': print('自分の心に正直になると幸せが訪れるでしょう。') elif a=='B': print('目先にとらわれていると失敗します。計画を立てましょう。') elif a=='O': print('焦りは禁物、たまにはゆっくり休みましょう。') elif a=='AB': print('過去の自分にとらわれず、新しいことをやってみましょう。') else: print('A, B, O, AB のどれかで答えてください。')
◇ (3)の解答例 ◇ (※クリックして展開して下さい)
n = int(input('年齢:')) a = input('性別:') if a=='女': if n<3: print(0) elif n<7: print(1) else: print(2) else: if n<5: print(0) else: print(1)
< 前の記事 | | | Web講座TOP | | | 次の記事 > |