エラー処理
CoddyのRubyジャーニー「基礎」セクションの一部 — レッスン 85/88。
チャレンジ
簡単無効なメニューオプションに対するエラーハンドリングを追加して、Daily Expense Tracker(日次経費トラッカー)を完成させてください。
プログラムは以下の動作を行う必要があります:
expensesという名前の空の配列を初期化する- メニューを表示し、ユーザーの入力を読み取る
loop doを作成する - ユーザーが
"1"を入力したとき、経費の名前と金額をプロンプトで求め、:nameと:amountキーを持つハッシュを作成し、それをexpenses配列に追加して、Expense added!と出力する - ユーザーが
"2"を入力したとき、すべての経費を表示するか、経費が存在しない場合はメッセージを表示する - ユーザーが
"3"を入力したとき、すべての経費の合計と平均を計算して表示するか、経費が存在しない場合はメッセージを表示する - ユーザーが
"4"を入力したとき、配列からすべての経費を削除し、All expenses cleared!と出力する - ユーザーが
"5"を入力したとき、Goodbye!と出力してループを終了する - それ以外の入力に対しては、
Invalid option. Please try again.と出力する
メニューは以前とまったく同じように表示される必要があります:
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: 例えば、入力が 7、abc、そして 5(2つの無効なオプションの後に終了)の場合、出力は以下のようになります:
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Invalid option. Please try again.
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Invalid option. Please try again.
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Goodbye!入力が 1、Coffee、4.5、6、2、そして 5(経費の追加、無効なオプション、表示、終了)の場合、出力は以下のようになります:
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Expense name: Amount: Expense added!
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Invalid option. Please try again.
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option:
--- Your Expenses ---
Coffee: $4.5
--- Expense Tracker ---
1. Add Expense
2. View Expenses
3. Total & Average
4. Clear All
5. Exit
Choose an option: Goodbye!自分で試してみよう
expenses = []
loop do
puts "--- Expense Tracker ---"
puts "1. Add Expense"
puts "2. View Expenses"
puts "3. Total & Average"
puts "4. Clear All"
puts "5. Exit"
print "Choose an option: "
choice = gets.chomp
if choice == "1"
print "Expense name: "
name = gets.chomp
print "Amount: "
amount = gets.chomp.to_f
expenses << { name: name, amount: amount }
puts "Expense added!"
elsif choice == "2"
if expenses.empty?
puts "No expenses recorded yet."
else
expenses.each do |expense|
puts "#{expense[:name]}: $#{expense[:amount]}"
end
end
elsif choice == "3"
if expenses.empty?
puts "No expenses to calculate."
else
total = expenses.sum { |expense| expense[:amount] }
average = total / expenses.length
puts "Total: $#{total}"
puts "Average: $#{average}"
end
elsif choice == "4"
expenses.clear
puts "All expenses cleared!"
elsif choice == "5"
puts "Goodbye!"
break
end
puts ""
end