Menu
CoddyTech

Chấm điểm linh hoạt

Thuộc phần Logic và luồng thực thi trong hành trình Swift của Coddy. Bài học 51 trên 56.

So sánh bằng nghiêm ngặt quá chặt chẽ. Các bài trắc nghiệm thực tế chấp nhận paris, Paris và PARIS là cùng một đáp án.

Công thức từ chương 1: xóa khoảng trắng, chuyển cả hai vế thành chữ thường rồi so sánh:

func grade(_ given: String, _ answer: String) -> Bool {
    let g = given.trimmingCharacters(in: .whitespaces).lowercased()
    let a = answer.trimmingCharacters(in: .whitespaces).lowercased()
    return g == a
}

Đây là kiểu hàm hỗ trợ đáng để tách riêng thành một hàm. Vòng lặp trắc nghiệm sẽ dễ đọc hơn khi mỗi câu hỏi nằm trên một dòng, và ngày mai bạn chỉ cần sửa lỗi ở một chỗ.

challenge icon

Thử thách

Dễ

Định nghĩa hàm grade(_ given: String, _ answer: String) -> Bool trả về true khi hai chuỗi khớp nhau sau khi cắt khoảng trắng và chuyển cả hai về chữ thường.

Đã cho sẵn ngân hàng questions. Đọc ba dòng từ stdin. Với mỗi câu hỏi, hãy in ra:

  1. Nội dung câu hỏi
  2. correct hoặc wrong, tùy theo kết quả so sánh linh hoạt

Sau khi chạy, in ra Score: <n>/3.

Với đầu vào 4 / PARIS / Green, đầu ra là:

2 + 2?
correct
Capital of France?
correct
Color of grass?
correct
Score: 3/3

Tự làm thử

let questions: [(String, String, String)] = [
    ("math", "2 + 2?", "4"),
    ("geo", "Capital of France?", "Paris"),
    ("science", "Color of grass?", "green")
]

// TODO: viết hàm (function) func grade(_:_:)->Bool, so sánh sau khi trim và chuyển thành chữ thường
// Sau đó lặp qua các câu hỏi, in câu hỏi, đọc câu trả lời, rồi in đúng hoặc sai;
// Kết thúc bằng 'Score: <n>/3'
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng thực thi

Tự luyện tập: Playground Swift