こんにちは。IT/経済ジャーナリストで投資家の渡辺です。
前回はif文を使って、コンピュータにあれこれ判断させました。
判断ができると、かなり、コンピュータらしいプログラムが書けます。
if文として条件に合えば処理Aへ、合わなければ処理Bへ飛ぶ、という流れは変わらないのですが、このチェックに1つだけの条件でなく、複数の条件を組み合わせることができるのです。
2つとも合うならAND、いずれかで1つでいいならOR
このように2つの条件を組み合わせる時は、どちらも満たしていないといけない場合と、どちらかがあればOKな場合の2つのパターンがあります。
たとえば、求人の条件で年齢が20才以上から65才までの方とあった場合、A)20才以上であること、B)65才以下であることの条件のいずれも満たしている必要があります。
つまりAかつBのいずれもOKである、ということです。
下図のように、2つの関門をいずれもクリアしないといけないので、ちょっとキビシイです。
どちらも、ということで、英語でいうと、2つの条件はANDでつながり、以下のように表します。
A AND B
もう1つ、たとえば役所の手続きの身元確認などで、A)運転免許証か、B)健康保険証を持参してください、という場合。
これはAまたはBのいずれかがあればOKということで、英語のORでつなげばいいのです。
A AND B
下図のように、2つの関門のどちらかさえクリアすればいいので、ANDよりはちょっとユルいです。
この AND と OR をうまく使いこなすと、けっこうフクザツな条件チェックもささっと済ませることができます。
入力チェックに使ってみる
それでは実際に、このやり方でプログラムを書いてみます。
前回作ったテストの点数から成績を判定するプログラムを改良してみましょう。
<過去記事>
テストの点数なので、その範囲は一番大きくて100点、一番少なくて0点です。
もしユーザーが打ち間違えて、100点より大きい点数を入れた場合や、0点より少ない(マイナスになってしまいますが)点数が入力されたら、警告を出すようにしてみます。
これを不等号で表すと、point < 0であるか、または point > 100 となります。
Pythonのコードで表すと、if point < 0 or point > 100: と表せます。
前回のコードのキーボード入力の下に、このようなコード(赤字部分)を挟んでください。
# coding: utf-8 point = int(input("点数を入力:")) if point < 0 or point > 100: print("点数は0〜100点の範囲で入力してください。") if point == 100: print("満点") elif point >= 80: print("優") elif point >= 70: print("良") elif point >= 60: print("可") else: print("不合格")
これで「Run ‘study00’」を実行して、試しに100点より大きい点数やマイナスの点数を入力してみてください。
何と後ろのif文の「80点以上」の条件に合致してしまい、成績が「優」と判定されてしまいました。
ANDを使って、より範囲を絞る
これは「優」の判定が、point >= 80: と80点以上を全部引っくるめてしまっているからです。
より正確には、「優」は80〜99点、「良」は70〜79点、「可」は60〜69点、「不合格」は0〜59点です。
この条件で、先ほどのコードのif文のところを書き換えてみます。
追加部分を「赤字」で示します。
if point == 100:
print(“満点”)
elif point >= 80 and point < 100:
print(“優”)
elif point >= 70 and point < 80:
print(“良”)
elif point >= 60 and point < 70:
print(“可”)
elif point >= 0 and point < 70:
print(“不合格”)
今度は、ユーザーへの警告だけがしっかりと表示されました。
<今日の要約ノート>
if文の後ろには2つ以上の条件を置くことができる。もし条件を両方とも満たす必要があるときは ANDで、「A and B」とつなぎ、どちらか1つでも満たしていればいい場合は、「A or B」とする。
コメント
[…] ・ちょっとフクザツな条件もif文とand, orを使えば1行ですぱっとチェックでき… […]
[…] ・ちょっとフクザツな条件もif文とand, orを使えば1行ですぱっとチェックでき… […]