(✿✪‿✪。)ノコンチャ♡
前回までではプログラミングで「肝」となる
『条件分岐』について学んできました。
今回は、
それらを使って「より複雑な条件分岐」について、
学んでいきたいと思っています。
「複雑って・・・」
って思った人もいるかと思いますが、
事例を挙げてプログラミングしていきますので、
必ず「なぁーんだ、そーだったのか」って、
納得してもらえることと思います。
では早速ですが、一緒に学んでいきましょう!
3段階以上の条件分岐
前回で年齢の入力で、
未成年者か成人かの判断をしました。
今回は、
その判別に「高齢者(65歳以上)」を追加してみましょう。
『elif 節』の記述方法
if 文に『 elif 節』を追加することで、
複数の条件分岐をすることができます。
もし~ならば・・・、そうではなく~ならば・・・
と処理を実行させるものです。
if␣式や関数など(1):
␣␣␣␣実行する処理(1)
elif␣式や関数など(2):
␣␣␣␣実行する処理(2)
else:
␣␣␣␣実行する処理(3)
プログラミングの記述例
実際にプログラムを記述して実行した方がわかりやすいと思います。
test=input('年齢は?')
age=int(test)
if␣age<20:
␣␣␣␣print('未成年者です')
elif␣age>=65:
␣␣␣␣print('高齢者です')
else:
␣␣␣␣print('成人です')
つまり、
年齢を入力されたら、
まず「20歳より小さい数値」だったら「未成年者」。
次に、
20歳以上だったら『 elif 節』が実行されます。
なので「65歳以上の数値」だったら「高齢者」。
最後に、
それ以外、つまり「20歳以上で65歳より小さい数値」は、
『 else 節』が実行されるので「成人」と表示されます。
プログラミングの実行
それぞれの年齢を入力して結果を表示させてみます。
ここで疑問にお答えしましょう。
なぜ『 if 』じゃなくて『 elif 』を使うのかって?
では、
実際に『if』に書き換えて実行してみましょう。
『 elif 』を『 if 』に書き換えて実行してみます。
未成年者の年齢を入力すると、
最初の分岐『 if 節(20より小さい)』では True なので、
すぐ下の処理が実行されます。
次の分岐『 if 節(65以上)』では False なので、
下の処理はスキップされ、
『 else 節』の処理が実行されてしまいます。
つまり、
未成年者の年齢を入力されると、
「未成年者です」と「成人です」と表示されてしまうのです。
この結果から、
『 if ~ elif ~ else 』はひとつの if 文となり、
どれか一つだけの処理が実行されることがわかります。
2つの『 if 文』の組み合わせ
では、2つの『 if 文』を組み合わせて記述する場合は、
どのような条件分岐なのかを学びましょう。
これまで学習してきた内容から、
処理するプログラムを考えてみます。
例えば、
入力されたデータが『数値』だったら年齢判断をし、
数値以外のデータが入力されたら、
プログラムを終了することとします。
test=input('年齢は?')
if␣test.isdigit():
␣␣␣␣age=int(test)
␣␣␣␣if␣age<20:
␣␣␣␣␣␣␣␣print('未成年者です')
1つ目の if 文の処理の中に2つ目の if 文が入るため、
その処理は行頭の字下げは、
『半角8文字分(␣␣␣␣␣␣␣␣)』
となることに注意してください。
では、
実際に記述して実行してみましょう。
『数値』と『文字列』を入力した結果です。
ブール演算子
初級編の「演算子」の項目でも紹介しましたが、
ブール値(True・False)を受け取って、
結果を返す『ブール演算子』があります。
これには、
「and」「or」「not」の3種類があります。
それでは、
それぞれのブール演算子について学んでいきましょう。
and 演算子
『 and 演算子』は、
左右の値がどちらも「True」の時だけ「True」を返します。
ちょっとわかりずらいので、
値の代わりに比較演算子を左右に置き換えてみましょう。
例えば、
入力された年齢が、
義務教育の対象(6~15歳)かどうかを判断してみましょう。
test=input('年齢は?')
age=int(test)
if␣age>=6␣and␣age<=15:
␣␣␣␣print('義務教育の年齢です')
前項でも学んだ『 if 文』を2つ使って処理することもできますが、
このように、
『 and 演算子』を使うと、
プログラムを簡素化できます。
or 演算子
『 or 演算子』は、
左右の値どちらか一方でも「True」であれば「True」を返します。
例えば、
入力された年齢が、
幼児(5歳以下)と高齢者(65歳以上)の場合に、
処理するプログラムを記述してみましょう。
test=input('年齢は?')
age=int(test)
if␣age<=5␣or␣age>=65:
␣␣␣␣print('幼児・高齢者です')
not 演算子
『 not 演算子』は、
直後(右)の値のブール値を逆転させます。
つまり、
直後の値が「False」のときだけ処理を実行します。
例えば、
「 isdigit メソッド」は、
文字列が数値のときだけ「True」を返します。
数値じゃないときに何かの処理を実行したい場合、
つまり「False」が返された場合に、
処理を実行させることができます。
test=input('年齢は?')
if␣not␣test.isdigit():
␣␣␣␣print('数値を入力してください')
この『 not 演算子』は値を1つしか持てない演算子で、
これを「単項演算子」と呼びます。
負の数値を表すために使う「-(マイナス)」も、
単項演算子です。
年齢層を分析するプログラム
これまで学んできた「条件分岐」の総まとめとして、
年齢層を分析するプログラムを作りましょう。
年齢層を分析するプログラムの仕様は、
以下の通りとします。
- 年齢を入力させる
- 入力された文字列が数字のみのときだけ年齢の判定をする
- 「未成年者」「成人」「高齢者」の判別結果を表示する
- 未成年者のうち、義務教育期間であれば「義務教育」も表示する
- 入力された文字列が数字のみでなければメッセージを表示する
「数字のみ」の判定と年齢層
まずは、
義務教育期間の判定以外の処理を考えます。
input 関数でユーザーに年齢を入力させ、
入力された文字列が数字のみかを if 文と isdigit メソッドで判定します。
年齢層を判定するため if ~ elif ~ else の3段階で表示させます。
もし数字以外が入力された場合は、
「数字のみを入力せよ」と表示させプログラムを終了します。
test=input('年齢は?')
if␣test.isdigit():
␣␣␣␣age=int(test)
␣␣␣␣if␣age<20:
␣␣␣␣␣␣␣␣print('未成年者です')
␣␣␣␣elif␣age<65:
␣␣␣␣␣␣␣␣print('成人です')
␣␣␣␣else:
␣␣␣␣␣␣␣␣print('高齢者です')
else:
␣␣␣␣print('数字のみを入力せよ')
インデント(字下げ)に注意しましょう。
インデントに間違いがあれば、
「インデンテーションエラー」が表示されます。
義務教育期間の判定
未成年者だった時に義務教育期間の判定を追加します。
義務教育期間(6~15歳)であれば、
「未成年(義務教育)者」と表示させ、
それ以外は「未成年者」を表示させます。
つまり、
『20<age』の if 節のブロック内に if 文を追加します。
test=input('年齢は?')
if␣test.isdigit():
␣␣␣␣age=int(test)
␣␣␣␣if␣age<20:
␣␣␣␣␣␣␣␣if␣age>=6␣and␣age<=15:
␣␣␣␣␣␣␣␣␣␣␣␣print('未成年(義務教育)者です')
␣␣␣␣␣␣␣␣else:
␣␣␣␣␣␣␣␣␣␣␣␣print('未成年者です')
␣␣␣␣elif␣age<65:
␣␣␣␣␣␣␣␣print('成人です')
␣␣␣␣else:
␣␣␣␣␣␣␣␣print('高齢者です')
else:
␣␣␣␣print('数字のみを入力せよ')
プログラムの実行結果
それぞれの年齢層を入力して、結果を見てみましょう。
プログラミングは、
処理の中に処理を追加していくことで、
複雑なプログラミングが可能です。
どこかにミスがあれば、
エラーメッセージが表示されますので、
その解決に努めることでプログラミング技術も向上します。
さいごに
最後に「エラーメッセージ」について補足します。
インデントに関わるエラー
『 if 文』について学んできましたが、
次の行でインデント(字下げ)が必要なのに、
インデントしていないとエラーメッセージが出ます。
このように、
3行目の記述で必要なインデントを忘れてしまって実行すると、
これは、
「一つのインデントのブロックを予期した」というメッセージが表示されます。
また同時に、
インデントが必要な行はカーソルで指摘してくれます。
それでは逆に、
インデントする必要がないところでインデントするとどうなるでしょう。
このまま実行すると、
「予期しないインデント」というエラーメッセージが出ます。
もちろん、
どこの記述かをカーソルで指摘してくれます。
バリューエラー
これまでのプログラムでは、
入力された文字列が数値(数字のみ)の場合に処理が実行されるように、
『isdigit メソッド』を使用しました。
では、
数字以外の文字列が入力され、
その文字列を『 int 関数』で整数の型として返した場合は、
どうなるでしょうか。
入力された文字列が数字のみならば、問題なく実行されます。
しかし、
数字以外の文字列を入力されると、
『 int 関数』の引数では対応できないデータ型なので、
当然ながらエラーとなります。
このエラーメッセージを解説すると、
値エラー:10進数に変換する int 関数に対して不正のリテラル
:文字列「四十一」
つまり、
整数に変換できない文字列だと指摘しているのです。
if 文の記述でスペース(␣)忘れのエラー
中級編の初日でも学んだように『 if 文』を記述するときは、
『 if 』の後にスペース(␣)を入れて、
式や関数などを記述して、
行末はコロン(:)が必要でしたね。
しかし、
『 if 』の後のスペースを忘れてしまったまま実行してしまうと、
当然エラーとなりプログラムが停止します。
これは「不正な文法」という意味のエラーメッセージです。
更に、
どこの行でエラーが発生したかもすぐにわかります。
また、
『 if 文』の記述で行末のコロン(:)を忘れてしまった場合も、
同様の文法エラーとなります。
前にもお話した通り、
プログラムを習得する近道は、
実際に想定される環境で実行して、
結果を確認することです。
もしその際に「エラー」が発生したら、
そのエラー箇所の修正を行っていくことだと思います。
Pythonプログラミングでは、
エラー箇所を指摘してくれるので、
とっても優しい言語のひとつです。
これからも一緒に学んでいただけると嬉しいです。
ではまた、お会いしましょう。
☆ ☆ ☆ 中級編スケジュール ☆ ☆ ☆