Rubyで条件分岐
Ruby実行環境のインストールから基本的な計算までは第1回で書いてます。
今回は処理を条件に応じて分岐させる条件分岐というものをやってみます(ノ)・ω・(ヾ)
3,000円以上は送料無料にしてみる(ifを使った条件分岐)
puts(“価格を入力してEnterを押して下さい。”)
price=gets.to_i
puts(“個数を入力してEnterを押して下さい。”)
pics=gets.to_i
total=price*pics
puts(“合計金額は#{total}円です。\n”)
上記のコードでの合計金額が3,000円未満(total<3000)の場合は送料500円を加算し、3,000円以上(total>=3000)の場合は送料無料にしてみるよ(・ω・)ノ
比較記号を使ってみる
この作業には比較記号というものを使います。次の表を見て下さい。
比較記号 | 使い方 | 意味 |
---|---|---|
> | A>B | AはBを超える |
< | A<B | AはB未満 |
>= | A>=B | AはB以上 |
<= | A<=B | AはB以下 |
== | A==B | AはBと等しい |
「以上」「以下」は同じ値も含みます。「超える」「未満」は同値を含みません。そして不等号が正しければ true(真)、不等号が間違って入れば false(偽)となります。「A==B」は等しいことを示します。「A=B」は「BをAに代入する」となり数学と異なりますので注意。
total=3000
puts(total>=3000)
trueと表示されます(・ω・)
total=2000
puts(total>3000)
これはfalse(`・ω・′ )
puts(“時間だ、答えをきこう!”)
これはバルス(`・ω・′ )
条件分岐する
trueなら送料無料、falseなら500円加算と条件に応じて結果を変えるのが条件分岐です(・ω・)ノ
if ● then
#●がtrueの場合ここに書いたコードが実行される
#●がfalseの場合何もしない
end
「もし●がtrueだったら(if ●)その時は(then)コードを実行し、終わる(end)」という構造です。●がtrueであればthen〜endの間のコードが実行されます。3,000円以上で送料無料と表示し、3,000円未満で送料500円と表示する場合、
#3,000円以上の場合
if total>=3000 then
puts(“送料無料です!”)
end
#3,000円未満の場合
if total<3000 then
puts(“送料は500円です!”)
end
と書きます。なんかごちゃっとしてますね。1番目のif(条件分岐)の total>=3000 でfalseとなった場合、2番目のifはtrueになりますので、この場合2番目は else(その他は)を使用します。if→else→endまでがひとまとめですので、elseの前にendは不要です。
if total>=3000 then #3,000円以上の場合
puts(“送料無料です!”)
else #その他の場合
puts(“送料は500円です!”)
end
すっきりした(ノ)・ω・(ヾ)
条件を3つ以上に分ける場合
条件が1つだけなら if〜end 、2つなら if〜else〜end ですが、3つ以上なら if〜elsif 〜…〜elsif〜else〜end という具合に elsif を使います。elseif では無いので注意(`・ω・′ )!
例えば、次のように分けてみます。なお、「2500円以上」かつ「3000円未満」という条件は && を用いて A&&B(AかつB)と表記します。
合計金額の範囲 | 条件 | 表示 |
---|---|---|
合計金額3000円以上 | total>=3000 | 送料無料 |
合計金額2500円以上かつ3000円未満 | total>=2500&&total<3000 | 送料200円 |
合計金額2500円未満 | total<2500 | 送料500円 |
puts(“価格を入力してEnterを押して下さい。”)
price=gets.to_i
puts(“個数を入力してEnterを押して下さい。”)
pics=gets.to_i
total=price*pics
#3,000円以上の場合
if total>=3000 then
puts(“送料無料”)
#2500円以上3000円未満の場合
elsif total>=2500&&total<3000 then
puts(“送料200円”)
#2500円未満の場合
else
puts(“送料500円”)
end
実際にターミナル(コマンドプロンプト)での動作はこんな感じ(・ω・)ノ
if文を簡略化する
今回のようにシンプルな条件分岐であれば if 〜 とコード部分を1行で記述したほうがスッキリします(ノ)・ω・(ヾ)
#3,000円以上の場合
puts(“送料無料”) if total>=3000
#2500円以上3000円未満の場合
puts(“送料200円”) if total>=2500&&total<3000
#2500円未満の場合
puts(“送料500円”) if total<2500
サイズに応じて送料を細かく分ける(caseを使った条件分岐)
宅配便では60サイズが600円、80サイズが700円という具合に送料がわかれていますが、商品の宅配サイズごとに異なる送料を表示させるという処理をしてみましょう(ノ)・ω・(ヾ)
サイズ | 表示 |
---|---|
60 | 送料600円 |
80 | 送料700円 |
100 | 送料800円 |
120 | 送料900円 |
140 | 送料1,000円 |
160 | 送料1,200円 |
それ以外 | そのサイズはありません! |
if文で細かく分けてもいいですが、case文を使うとこんなに簡単にコードを書けます。
puts(“商品の宅配サイズを入力して下さい”)
size=gets.to_i
case size
when 60
puts(“送料600円”)
when 80
puts(“送料700円”)
when 100
puts(“送料800円”)
when 120
puts(“送料900円”)
when 140
puts(“送料1,000円”)
when 160
puts(“送料1,200円”)
else
puts(“そのサイズはありません!”)
end
60なら「送料600円」、「0」「200」「85」のように分岐にない数値を入力すると「そのサイズはありません!」と表示されます(・ω・)
ちなみに、宅配便は3辺のサイズが60cm以内でサイズ60、80cm以内でサイズ80という具合に決まっていますので、3辺のサイズをsize(変数)に代入した場合、例えば56cmなら60サイズの料金を、78cmなら80サイズの料金を表示するという具合にしたほうが実用的です。
この場合、1〜60を
1..60
と書くことができます。
puts(“商品の3辺サイズ(cm)を入力して下さい”)
size=gets.to_i
case size
when 1..60
puts(“送料600円”)
when 61..80
puts(“送料700円”)
when 81..100
puts(“送料800円”)
when 101..120
puts(“送料900円”)
when 121..140
puts(“送料1,000円”)
when 141..160
puts(“送料1,200円”)
else
puts(“そのサイズはありません!”)
end
「56」と入力しても「送料600円」と表示されるようになりました(・ω・)ノ
3,000円以上で送料無料、3,000円未満ならサイズ別に送料を取る場合
ifとcaseを組み合わせます(ノ)・ω・(ヾ)
if文で3000円以上かどうかを条件分岐し、3,000円以上なら送料無料、3000円未満の場合はcase文でサイズ別の送料を計算します。
puts(“価格を入力してEnterを押して下さい。”)
price=gets.to_i
puts(“個数を入力してEnterを押して下さい。”)
pics=gets.to_i
total=price*pics
#3,000円以上の場合
if total>=3000 then
puts(“送料無料”)
#3000円未満の場合
else
puts(“商品の3辺サイズ(cm)を入力して下さい”)
size=gets.to_i
case size
when 1..60
puts(“送料600円”)
when 61..80
puts(“送料700円”)
when 81..100
puts(“送料800円”)
when 101..120
puts(“送料900円”)
when 121..140
puts(“送料1,000円”)
when 141..160
puts(“送料1,200円”)
else
puts(“そのサイズはありません!”)
end
end
合計金額が3,000円以上であれば送料無料と表示し、3,000円未満であれば3辺サイズの入力を求め、サイズに応じて送料を表示します。
以上が条件分岐の基礎です(ノ)・ω・(ヾ)
次は繰り返し処理(ループ処理)について書きます。