問題
以下の条件を達成するプログラムを実装しなさい
銀行口座に10万円の預金残高があり、お金を引き出すプログラムを作成します。
・お金を引き出すwithdrawメソッドを作成する
・お金を引き出すと手数料110円かかり、「◯◯円引き落としました。残高は◯◯円です」と表示する(残高は手数料を引いた額を表示します)
・引き落とし金額と手数料の合算が、預金残高より大きい場合は「残高不足です」と表示する
・以下にヒントを用意するので参考にしてください
def withdraw(balance, amount)
fee = 110 # 手数料
# 引き落とし額と残高を表示する、もしくは残高より多く引き落としたら残高不足と表示
end
balance = 100000 # 残高
puts "いくら引き落としますか?(手数料110円かかります)"
amount = gets.to_i
withdraw(balance, amount)
私の回答
def withdraw(balance, amount)
fee = 110
after_balance = balance - amount - fee
if after_balance < 0
puts "残高不足"
else
puts "#{amount}円引き落としました。残高は#{after_balance}円です"
end
# 引き落とし額と残高を表示する、もしくは残高より多く引き落としたら残高不足と表示
end
balance = 100000
puts "いくら引き落としますか?(手数料110円かかります)"
amount = gets.to_i
withdraw(balance, amount)
解説
まず3行目で残高-引き落とし額-手数料を計算し残高後の数値をafter_balanceに代入する。
次にif文でafter_balanceが0未満の場合は残高不足と出力。
それ以外は残高を表示する記述をする。
模範回答
def withdraw(balance, amount)
fee = 110
if balance >= (amount + fee)
balance -= (amount + fee)
puts "#{amount}円引き落としました。残高は#{balance}円です"
else
puts "残高不足です"
end
end
balance = 100000
puts "いくら引き落としますか?(手数料110円かかります)"
amount = gets.to_i
withdraw(balance, amount)
模範解説
13行目で入力した金額(amount)と手数料110(fee)の合計が100,000以上か否かを判断し処理しています。金額と手数料の合計が100,000以下の場合は、balance -= (amount + fee)、つまりbalance = balance - (amount + fee)が処理され、最終的な返り値が出力されます。金額と手数料の合計が100,000以上の場合は残高不足である旨のメッセージを表示しています。
感じたこと
考え方自体は合っていたが記述方法が間違いだった。正常に処理されていればOKだが他人がコードを見た際に
わかりやすいコードを書くことが必要だと思うので今後は可読性を意識して取り組みたい。
また最近嬉しいことに私の投稿にご指摘していただけることが多くなってきました。
とても勉強になるので今後ともアドバイスやご指摘いただけると幸いです。