Menu
CoddyTech

Ôn tập: Máy tính an toàn

Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 47 trên 56.

Hãy tạo một máy tính nhỏ có thể xử lý đầu vào không hợp lệ bằng cách kết hợp raise, nhiều mệnh đề rescue và ensure.

challenge icon

Thử thách

Trung bình

Định nghĩa phương thức calc(a, op, b) để:

  • Ném ra ArgumentError với thông báo "unknown operator" nếu op không phải một trong các toán tử +, -, *, /
  • Thực hiện phép tính tương ứng trong trường hợp còn lại (dùng phép tính số nguyên cho /)

Sau đó đọc ba dòng từ đầu vào, a, op, b: rồi gọi calc bên trong begin / rescue / ensure:

  • Nếu thành công, in ra <a> <op> <b> = <result>
  • Nếu gặp ArgumentError, in ra Bad operator
  • Nếu gặp ZeroDivisionError, in ra Cannot divide by zero
  • Trong ensure, luôn in ra --- end ---

Dùng Integer(...) để phân tích a và b trong cùng khối begin, để đầu vào không phải số nguyên cũng rơi vào Bad operator (ArgumentError bao gồm cả hai trường hợp).

Với đầu vào 6 / * / 7, đầu ra là:

6 * 7 = 42
--- end ---

Với đầu vào 10 / / / 0:

Cannot divide by zero
--- end ---

Tự làm thử

# TODO: định nghĩa calc(a, op, b), phát sinh ArgumentError khi op không xác định

raw_a = gets.chomp
op    = gets.chomp
raw_b = gets.chomp

# TODO: dùng begin/rescue/ensure như mô tả

Tất cả bài học trong Logic và luồng xử lý

Tự luyện tập: Trình biên dịch Ruby online