Python学習 カテゴリ | |
前回 | 次回 |
今回はちょっと複雑だけど、めちゃくちゃ使える論理演算子とネスト構造について学んでいきます。プログラミングについてゲームを通して触れることのできるマイクラのレッドストーン回路では、論理演算子がかなり重要な鍵を握っていました。論理演算子が使いこなせることで、かなり自由度の幅が広がり、論理演算子をマスターしただけでこんな物まで作れちゃうの?!なんてものを作る友人もいたりしましたね。とまあ、一部の人にしか伝わらない話はこのあたりにしておきましょう。今回は論理演算子とネスト構造に触れて学習を進めていきましょう。
前回のおさらい
前回は比較演算子( == , != , < , > , <= , >= )について、さらにif・else・elif文について学んでいきました。
if文は第一条件、elifは第二条件、elseはその他の条件という順に使っていくのでした。
もし忘れてしまっていたら、前の記事に戻って勉強をし直しましょう。
論理演算子とは
論理演算子はAND,OR,NOTの3つです。
AND,OR,NOTについて、正直どういうものかあまりわからないんだよね…というような方のために、念の為AND/OR/NOT の説明を添えると、次のような説明になります。
ANDは「X and Y」と表せば、「XとY」というような意味になります。
つまり、コード上では X と Y がどちらも 真(True) なら 真であり、 それ以外の場合(XとYが真でない場合)は 偽(False)とするという意味になります。
ORは「X or Y」と表せば「XまたはY」というような意味になります。
つまり、コード上では Xまたは Y のうち、どちらか 1 方・もしくは両方が 真(True) なら 真であり、それ以外(XまたはYが真でない場合)は 偽(つまりどちらも真ではない場合)とするという意味になります。
NOTは「NOT X」と表せば「Xではない」というような意味になります。
つまり、Xを条件から除外するという時に使います。
なれないうちはコードをぱっと見ただけではNOTがすっと頭に入って来ないので、脳内でスルーしてしまいがちですので気をつけてコードを見ていきましょう。
論理演算子を使ってみる
では、実例を用いて論理演算子を学習してみましょう。今回はif + 論理演算子ということで、組み合わせて応用的に使い方を覚えていきます。
AND
if文の中でANDは「Xが真で、Yも真のときにはその後の処理をするけれど、どちらかが真じゃないとき、どちらも真じゃないときは他の処理に渡す」という処理になります。
ANDを単体で使えばただ単に「XとY」という表現になります。
これは、受け取った時間が、12時から13時までの間であれば「お昼ごはんの時間だ」と出力し、それ以外の時間であれば「ご飯まだかな」と出力するコードです。
ANDで繋いでいるので、12時以上13時以下という2つの条件が揃っていなければ 真(True) とはなりません。
OR
if文の中でORは「XとYのどちらも真のとき、X、Yのうちどちらかが真のときもその後の処理をします。ただし、XとYがどちらも偽のときは他の処理に渡す」という処理になります。
ORを単体で使えばただ単に「XまたはY」という表現になります。
これは、12時または、18時のときに「ごはんの時間だ」という出力を返し、それ以外の時間には「ご飯まだかな」と返すコードです。
12時かつ18時のときにも真となり「ごはんの時間だ」と返しますが、質問の性質上はどちらかの時間の時に真の反応をします。
NOT
if文の中でNOTは if not X: とすることで「もしXでなければ」という処理になります。つまり、Xが当てはまらないときに、ifの中身の文を実行します。
NOTを単体で使えばただ単に「Xではない」という表現になります。
これは、15時であれば「おやつの時間だ!!」という結果が返ってきますが、もし15時でなければ、ifの中身が読み込まれ「まだおやつの時間ではない」と出力されます。
AND,OR,NOTを組み合わせて使う
AND,OR,NOTは組み合わせて使うことも可能です。
10 < int_time < 17 としているので、10時から17時が就業時間となっています、そのため本来12時も就業時間なのですが、and notを使ってあげることで、12時を例外として扱うことが可能です。
さらに、elifで12時のときの処理を別で書いてあげることで、お昼ごはんの時間だということがわかります。
それ以外の時間は自由時間としていますが、条件を増やしてあげることで帰宅時間や就寝時間などの出力を作ることも可能です。
if文のネスト構造
みなさんにネスト構造を教えるのは初めてです。今回は、ネスト構造はどういったものなのか、ということを説明し、if文を使って軽く触れていきます。ネスト構文はなかなか深いお話なので、この回ではなるほどなぁ、という感じで覚えて下さい。
ネスト構造とは
ネスト構造は条件分岐をより複雑に設定したい時に使う構造で、if文の中にさらにif文を入れるというように、更に細かく条件を付けることが可能になる構造です。
実際には if だけでなく関数ならば、その中にさらに関数を入れることができるため、if文だけの特別な構造というわけではなく、「関数内関数」「入れ子構造」「ネスト構造」などと呼ばれます。
ifのネスト構造例文
例にジェットコースターの条件分岐のコードを書きました。
上から順におさらいを兼ねて解説していきます。
まずは、高さと年齢を聞くinput関数を用意し、int型で数値型に直します。数値型とわかりやすいように、int_heightと、int_ageとしています。
まず、1つ目の if では身長が120cm以下でないかの条件分岐をします。120cm以上であっても120cmより低くても2つ目の if へ進み、10歳以下でないかの条件分岐を行いますが、1つ目のifで120cmより低ければ「ジェットコースターには乗れません」は確定しています。
120cm以上であればネスト構造で2つ目の if を入れ、10歳以下でないかの条件分岐を行います。10歳より若ければ、8行目の「ジェットコースターには乗れません」が表示され、10歳以上であれば「ジェットコースターに乗れます」が表示されます。
ここで注意したいのは、ifに対してelseを設定する際は、elseを設定したいifと同じ高さ(インデント)にしてあげる必要があるという点です。
ネスト構造はこのように使っていきます。andで簡略化する手段もありますが覚えておきたい構造の一つです。
それでは今回はこのへんで、次回は「配列」と「for文」について学んでいきましょう。