Ôn tập: Máy tính an toàn
Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 48 trên 56.
Thử thách
Trung bìnhTạo một máy tính nhỏ an toàn trước dữ liệu đầu vào không hợp lệ.
Định nghĩa CalcError: Error với các trường hợp: parse, divideByZero, unknownOp.
Định nghĩa hàm có thể ném ngoại lệ compute(_ a: String, _ op: String, _ b: String) throws -> Int để:
- Phân tích
avàbthành số nguyên, ném.parsenếu một trong hai không thành công - Ném
.unknownOpkhiopkhông phải là một trong các toán tử+,-,*,/ - Ném
.divideByZerokhiop == "/"vàb == 0 - Nếu không, trả về kết quả dạng số nguyên
Đọc một dòng đầu vào duy nhất: danh sách các biểu thức a:op:b, phân tách bằng dấu phẩy. Xử lý lần lượt từng biểu thức bằng do/catch. In ra một dòng cho mỗi biểu thức:
= <n>nếu thành côngparse error,div by zerohoặcunknown opcho từng trường hợp lỗi
Sau các dòng cho từng biểu thức, in ra một dòng tổng kết: OK: <n> với số lượng biểu thức đã xử lý thành công.
Với đầu vào 3:+:5,10:/:0,7:*:abc,9:%:2,12:-:4, đầu ra là:
= 8
div by zero
parse error
unknown op
= 8
OK: 2Tự làm thử
let exprs = readLine()!.components(separatedBy: ",")
// TODO: enum CalcError; func compute(...) throws -> Int;
// Dùng vòng lặp, do/try, in ra kết quả cho từng expr; cuối cùng in ra 'OK: <n>'
Tất cả bài học trong Logic và luồng thực thi
1Chuỗi chuyên sâu
Đếm và chỉ sốChữ hoa, chữ thường và xóa khoảng trắngTìm kiếm trong chuỗiTách và nối chuỗiThay thế chuỗi conÔn tập: Kiểm tra tên người dùng4Tập hợp
Tạo tập hợpPhép hợp và phép giaoPhép trừ và hiệu đối xứngTập con và tập hợp conÔn tập: Bộ lọc thẻ7Dự án: Theo dõi thói quen
Tổng quan dự ánĐánh dấu hoàn thành10Dự án: bộ máy trắc nghiệm
Tổng quan dự ánĐặt câu hỏi2Phạm vi và bước nhảy
Khoảng đóng và khoảng nửa mởBước nhảyPhương thức của phạm viPhạm vi trong switchÔn tập: Lưới lịchTự luyện tập: Playground Swift