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択の選択を迫られる、こんな都市伝説がある。

夕方の学校で、少年がトイレで用を済ませ、拭こうとすると紙が無かった。するとどこからともなくこんな声が聞こえてきた。

「赤い紙が欲しいか? 青い紙が欲しいか?」

フリー百科事典『ウィキペディア(Wikipedia)』

黄色が入る3択の場合もあるみたいだけども、気にしない。この都市伝説でコードを書いてみる。

ans = input("赤と青、どちらがいい?\n")

end1 = "あなたの体から真っ赤な血が噴き出し、血まみれの姿で発見された。"
end2 = "あなたは血を抜かれ、真っ青になった状態で発見された。"

result = end1 if (ans=="赤") else end2
print(result)

赤と青なら、赤が好き。

赤と青、どちらがいい?
赤
あなたの体から真っ赤な血が噴き出し、血まみれの姿で発見された。
赤と青、どちらがいい?
青
あなたは血を抜かれ、真っ青になった状態で発見された。

酷い仕打ちだ。トイレで紙がなかっただけなのに。


条件の書き方

条件を指定するためには、比較演算子や論理演算子を使う。

比較演算子はさっき使った、等しいことを示すダブルイコール(==)みたいなやつ。大きい小さいとか、2つの値を比べるための記号。

  • A == BA is B ; A と B が等しい

  • A != BA 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文は遊び甲斐があって楽しい。けど、キリがないので今日はここまでにしておこう。


この記事が気に入ったらサポートをしてみませんか?