本日のRuby基礎練習問題(22/3/10)
問題
ECサイトのポイント付与サービスを考えます。
購入金額が999円以下の場合、3%のポイント
購入金額が1000円以上の場合、5%のポイント
このように付与されるポイントを出力するメソッドを作りましょう。
ただし誕生日の場合はポイントが5倍になります。
誕生日の場合はtrue, 誕生日でない場合はfalseで表します。
また、小数点以下をすべてのポイント計算が終わったあとに切り捨てましょう。
呼び出し方:
calculate_points(amount, is_birthday)
出力例:
calculate_points(500, false) → ポイントは15点です
calculate_points(2000, false) → ポイントは100点です
calculate_points(3000, true) → ポイントは750点です
私の回答
def calculate_points(amount, is_birthday)
if amount <= 999
point = amount * 0.03
else
point = amount * 0.05
end
解説
購入金額におけるif関数は記述できたが誕生日における関数をどう記述すればよいかわからず
途中式で制限時間を超えてしまったため回答できず。
模範回答
def calculate_points(amount, is_birthday)
if amount <= 999
point = amount * 0.03
else
point = amount * 0.05
end
if is_birthday
point = point * 5
end
puts "ポイントは#{point.floor}点です"
end
模範解説
まず、購入金額が999円以下なのかまたは1000円以上なのかを判断し、2~6行目で処理しています。
そして、購入金額に対して0.03または0.05をかけて、ポイント数を計算して変数pointに代入しています。
その後に、is_birthdayがtrueの場合すなわち誕生日の場合は、直前で定義した変数pointに5をかける処理を行います。
最後に、point.floorとしてポイントの小数点以下を切り捨て、獲得したポイント数を出力しています。
別解としては、条件式をamount <= 999からamount < 1000に変える方法などがあります。
感じたこと
正直、模範解答を見ると簡単に思えてしまう。
しかし回答中はかなり悩んでしまう。まだ自分自身のレベルが垣間見えるが、
プラスに考え伸び代があると思い、日々失敗を繰り返し吸収していきたい。
.floorメソッド(小数点切り捨て)を学べてよかった。