Python備忘録2 -パラレルワールドを作りたい(条件分岐)-
前回に引き続いて、暫くは基本的なことを復習していこうと思う。
今日は、条件分岐の話。
本題に入る前に
こちらからアクションを起こすと、それに応えてくれる、そんなプログラムを書きたい。文字や数字を入力して、プログラムで受け取ってもらうために、inputを使う。
name = input("こんにちは!私はアリス。あなたの名前は?\n") # "\n" は改行するための記号
print(name + "っていうのね。素敵な名前だわ!よろしくね、" + name + "。")
実行すると、「あなたの名前は?」と訊かれるので「ブギブギ」と入力してみる。
こんにちは!私はアリス。あなたの名前は?
ブギブギ
ブギブギっていうのね。素敵な名前だわ!よろしくね、ブギブギ。
inputの()内には何か、テキストを入れてもいいし、入れなくてもいい。
inputもprintと同じように、コンソール上で()内の文字が表示される。テキストを入力してEnterで確定すると、次の処理が実行される。
ちなみに、inputで入力した値は数字であっても、文字列として受け取られる。数字として扱うためには、int() や float() で数値に変換する必要がある。
受け取った値によって処理を変える
if文の使い方
受け取った値によって、違った処理をしたいとき、if文を使う。
書き方はこんな感じ。
if (条件1):
処理の内容
elif (条件2):
処理の内容
・
・
・
elif (条件n):
処理の内容
else:
処理の内容
まず、if の条件でふるいにかけて、当てはまらないものは次の条件、その次の条件へと移っていく。2つ目以降の条件は elif で書き、elif は複数回使っても良いし、使わなくても良い。最後にどの条件にも当てはまらない場合の処理を else で書く。else には条件をつけなくていい。
コロン(:)をつけることと、インデントを入れることを忘れずに。
***
ans = input("トリック オア トリート?\n")
if ans == "トリート": # == で等しいの意味、= じゃないのだよ
print("ありがとう!")
elif ans == "トリック":
print("こしょこしょの刑だー!")
else:
print("(´・_・`)")
例えば、こんなコードで3パターン試してみる。無言でEnterを叩くか、違う言葉を言うと悲しい顔をされる。
トリック オア トリート?
トリート
ありがとう!
トリック オア トリート?
トリック
こしょこしょの刑だー!
トリック オア トリート?
(´・_・`)
***
ちなみに、条件を満たすか否かの単純な2択なら、こんな書き方もできる。
(満たす、Trueの時の値) if (条件) else (満たさない、Falseの時の値)
2択というと、yes か no で答えられる質問だとか、○✖️問題とか。そういえば、2択の選択を迫られる、こんな都市伝説がある。
黄色が入る3択の場合もあるみたいだけども、気にしない。この都市伝説でコードを書いてみる。
ans = input("赤と青、どちらがいい?\n")
end1 = "あなたの体から真っ赤な血が噴き出し、血まみれの姿で発見された。"
end2 = "あなたは血を抜かれ、真っ青になった状態で発見された。"
result = end1 if (ans=="赤") else end2
print(result)
赤と青なら、赤が好き。
赤と青、どちらがいい?
赤
あなたの体から真っ赤な血が噴き出し、血まみれの姿で発見された。
赤と青、どちらがいい?
青
あなたは血を抜かれ、真っ青になった状態で発見された。
酷い仕打ちだ。トイレで紙がなかっただけなのに。
条件の書き方
条件を指定するためには、比較演算子や論理演算子を使う。
比較演算子はさっき使った、等しいことを示すダブルイコール(==)みたいなやつ。大きい小さいとか、2つの値を比べるための記号。
A == B 、A is B ; A と B が等しい
A != B 、A is not B; A と B が異なる
A > B; A が B より大きい
A >= B; A が B 以上
A < B; A が B より小さい
A <= B; A が B 以下
A in B;A が B の中にある
A not in B;A が B の中にない
論理演算子は、複数の条件を扱うような時に使う記号。
(条件1) and (条件2) ;どちらの条件も同時に満たす
(条件1) or (条件2) ;少なくとも、どちらかの条件を満たす(両方満たすものも含まれる)
not (条件) ;条件を満たすもの以外、全部
***
試しに、レジでのお金の受け渡しを表現してみる。
if や elif の中にさらに if を入れる、といった入子構造にすれば、細かい分岐を作ることができる。
total = 1258
print("お会計、" + str(total) + "円になります。", end="")
pay = int(input("支払い金額を入力 "))
#ちょうど支払った場合
if pay == total:
print(str(total) + "円ちょうど、お預かりします。")
#お釣りがある場合
elif pay > total:
change = pay - total
coin = change % 1000
if change >= 2000 and coin != 0:
print("お釣りが、先に大きい方" + str(change-coin) + "円と、")
print("残り" + str(coin) + "円です。お確かめ下さい。")
else:
print("お釣りが" + str(change) + "円になります。お確かめ下さい。")
#支払い金額が不足している場合
else:
lack = total - pay
print(str(lack) + "円足りませんよ。")
最初のprint関数(お会計、〜)で end=”” と書いたのは、改行させないため。別にいいんだけど、print() の後で input() を使うと1行分のスペースが空くので。
4パターンあるから、「お札と小銭のお釣りがある場合」と「支払い金額が足りなかった場合」に絞って、実行結果を載せておく。
お会計、1258円になります。
支払い金額を入力 5010
お釣りが、先に大きい方3000円と、
残り752円です。お確かめ下さい。
お会計、1258円になります。
支払い金額を入力 1158
100円足りませんよ。
終わり
if文は遊び甲斐があって楽しい。けど、キリがないので今日はここまでにしておこう。