Bài 3: Dạy Máy Tính Cách Lựa Chọn (Trí tuệ của if-else)

Các em thân mến, ở bài học trước, chúng ta đã học cách “hỏi” máy tính những câu hỏi và nhận về câu trả lời True hoặc False. Nhưng nếu chỉ biết hỏi mà không biết hành động dựa trên câu trả lời, thì chương trình của chúng ta vẫn còn rất “ngây ngô”. Giống như một em bé biết trời đang mưa (True), nhưng lại không biết phải lấy ô để che. Trí thông minh thực sự không nằm ở việc biết, mà ở việc ra quyết định dựa trên những gì mình biết. Bài học hôm nay là một bước ngoặt. Chúng ta sẽ trao cho chương trình khả năng ra quyết định, khả năng lựa chọn giữa các ngã rẽ. Chúng ta sẽ biến nó từ một người trợ lý chỉ biết làm theo tuần tự thành một người quản gia có thể tự xử lý các tình huống khác nhau. Đây là lúc phép màu thực sự bắt đầu!

Mục tiêu bài học:

  • Hiểu được luồng thực thi rẽ nhánh trong một chương trình.
  • Sử dụng thành thạo cấu trúc if để thực thi một khối lệnh dựa trên một điều kiện.
  • Nắm vững cấu trúc if-else để tạo ra hai luồng xử lý khác nhau.
  • Áp dụng cấu trúc if-elif-else để giải quyết các bài toán có nhiều điều kiện phức tạp.
  • Rèn luyện kỹ năng “Đóng vai CPU” để theo dõi luồng logic của chương trình khi có các ngã rẽ.

1. Bối cảnh thực tế:

Lập trình Đèn giao thông thông minh Hãy tưởng tượng chúng ta đang lập trình cho một cột đèn giao thông. Yêu cầu rất đơn giản:

  • Nếu tín hiệu là “xanh”, thì cho phép xe đi.
  • Nếu tín hiệu là “đỏ”, thì yêu cầu xe dừng lại.
  • Nếu tín hiệu là “vàng”, thì yêu cầu xe đi chậm.

Làm thế nào để diễn đạt logic này cho máy tính hiểu? Chúng ta cần một công cụ để tạo ra các “ngã rẽ” trong chương trình.

2. Kiến thức cốt lõi: Kiến trúc sư của những ngã rẽ

2.1. Ngã rẽ đơn: Câu lệnh if

if (nếu) là công cụ cơ bản nhất. Nó kiểm tra một điều kiện, nếu điều kiện đó là True, nó sẽ thực hiện khối lệnh bên trong. Nếu là False, nó sẽ bỏ qua và đi tiếp.

Cú pháp quan trọng:

if dieu_kien:
—-# Khối lệnh này sẽ được thực thi
—-# NẾU dieu_kien là True.
—-# Lưu ý: Khối lệnh phải được lùi vào đầu dòng!

Việc lùi vào đầu dòng (indentation) là bắt buộc trong Python. Nó cho máy tính biết những dòng lệnh nào thuộc về câu if.

2.2. Ngã rẽ đôi: Cặp đôi if-else

else (ngược lại) luôn đi kèm với if. Nó cung cấp một con đường thứ hai cho chương trình khi điều kiện của if là False.

if dieu_kien:
—-# Làm việc A nếu điều kiện là True
else:
—-# Làm việc B nếu điều kiện là False

2.3. Nhiều ngã rẽ: Cấu trúc if-elif-else

Khi có nhiều hơn hai khả năng, chúng ta dùng elif (viết tắt của “else if”). Nó cho phép chúng ta kiểm tra liên tiếp nhiều điều kiện.

if dieu_kien_1:
—-# Làm việc A
elif dieu_kien_2:
—-# Làm việc B
elif dieu_kien_3:
—-# Làm việc C
else:
—-# Làm việc D (nếu tất cả các điều kiện trên đều sai)

Máy tính sẽ kiểm tra lần lượt từ trên xuống dưới. Ngay khi gặp một điều kiện True, nó sẽ thực hiện khối lệnh tương ứng và bỏ qua tất cả các elif và else còn lại.

3. Thực hành trên Colab: Lập trình đèn giao thông

>> BẤM VÀO ĐÂY ĐỂ MỞ BÀI THỰC HÀNH COLAB BÀI 3 <<

Hãy cùng nhau hiện thực hóa logic đèn giao thông.

# Hãy thử thay đổi giá trị của biến này thành "đỏ", "vàng" để xem kết quả khác nhau
tin_hieu = "xanh"

print("Đèn tín hiệu đang là:", tin_hieu)
print("Hành động của xe:")

if tin_hieu == "xanh":
    print("- Xe được phép đi.")
elif tin_hieu == "vàng":
    print("- Xe đi chậm lại và chuẩn bị dừng.")
elif tin_hieu == "đỏ":
    print("- Xe phải dừng lại trước vạch.")
else:
    print("- Tín hiệu lạ! Có lỗi hệ thống!")

print("\nChương trình kết thúc.")

4. “Đóng vai CPU”:

Đi theo con đường của logic Lần này, chúng ta không theo dõi giá trị của biến, mà theo dõi con đường mà CPU sẽ đi.

  • Giả sử tin_hieu = "xanh":
    1. Dòng if tin_hieu == "xanh": Máy tính hỏi "xanh" == "xanh"? Trả lời: True.
    2. Thực thi: Máy tính nhảy vào trong khối lệnh của if, in ra “- Xe được phép đi.”.
    3. Bỏ qua: Vì đã tìm thấy một điều kiện đúng, máy tính sẽ bỏ qua toàn bộ các khối elif và else còn lại.
    4. Kết thúc: Nhảy đến dòng print("\nChương trình kết thúc.").
  • Giả sử tin_hieu = "đỏ":
    1. Dòng if tin_hieu == "xanh": Máy tính hỏi "đỏ" == "xanh"? Trả lời: False. Bỏ qua.
    2. Dòng elif tin_hieu == "vàng": Máy tính hỏi "đỏ" == "vàng"? Trả lời: False. Bỏ qua.
    3. Dòng elif tin_hieu == "đỏ": Máy tính hỏi "đỏ" == "đỏ"? Trả lời: True.
    4. Thực thi: Nhảy vào trong khối lệnh, in ra “- Xe phải dừng lại trước vạch.”.
    5. Bỏ qua: Bỏ qua khối else còn lại.
    6. Kết thúc: Nhảy đến dòng print("\nChương trình kết thúc.").

5. Câu Hỏi & Bài Tập Củng Cố

Phần 1: Câu hỏi lý thuyết

Câu 1: Trong Python, điều gì được dùng để xác định một khối lệnh thuộc về một câu if?
A. Dấu ngoặc nhọn {}
B. Việc lùi vào đầu dòng (indentation)
C. Dấu chấm phẩy ;
D. Từ khóa BEGIN và END

Câu 2: Xem đoạn code sau. Kết quả in ra là gì?

x = 10
if x > 10:
    print("A")
else:
    print("B")

A. A
B. B
C. A và B
D. Không in ra gì cả

Câu 3: elif là viết tắt của cụm từ nào? A. else if B. else in file C. elegant if D. electric if

Phần 2: Bài tập thực hành cơ bản

Bài 2.1: Xếp loại học lực Viết một chương trình nhận vào một điểm số (thang 10) và in ra xếp loại học lực theo quy tắc:

  • Điểm >= 8: Giỏi
  • Điểm >= 6.5 và < 8: Khá
  • Điểm >= 5 và < 6.5: Trung bình
  • Điểm < 5: Yếu

Bài 2.2: Máy bán nước tự động Viết chương trình mô phỏng một máy bán nước.

  1. Tạo một biến so_tien của người dùng.
  2. Tạo một biến lua_chon (ví dụ: 1 cho Coca, 2 cho Pepsi, 3 cho Nước suối).
  3. Dùng if-elif-else để kiểm tra lua_chon và in ra thông báo tương ứng. Ví dụ: Nếu lua_chon là 1, in ra “Bạn đã chọn Coca. Giá 10000đ”.
  4. (Nâng cao): Thêm logic kiểm tra xem so_tien có đủ để mua món nước đã chọn không.

Phần 3: Thử thách tư duy & Gỡ lỗi

Bài 3.1: Thám tử logic Đoạn code sau được viết với mục đích kiểm tra xem một số có phải là “số dương chẵn” hay không. Tuy nhiên, nó đang chứa một lỗi logic nghiêm trọng. Hãy tìm ra và sửa nó.

# Đoạn code bị lỗi logic
number = 6

if number > 0:
    print("Đây là số dương.")
elif number % 2 == 0:
    print("Đây là số chẵn.")
else:
    print("Đây không phải là số dương chẵn.")

Gợi ý của giảng viên:

  • Hãy thử chạy code với number = 6. Kết quả là gì? Có đúng như mong đợi không?
  • Hãy nhớ lại cách if-elif-else hoạt động. Khi nó đã tìm thấy một điều kiện đúng, nó sẽ làm gì với các điều kiện còn lại?
  • Làm thế nào để kết hợp hai điều kiện “lớn hơn 0” VÀ “chia hết cho 2” trong cùng một câu if? (Gợi ý: tìm hiểu về toán tử logic and)

Tóm tắt & Lời nhắn của Giảng viên: Xin chúc mừng! Các em vừa hoàn thành một trong những bài học nền tảng nhất của lập trình. Từ giờ phút này, chương trình của các em đã không còn đi theo một đường thẳng nữa, nó đã có thể “suy nghĩ” và “lựa chọn”. Hãy dành thời gian để thực sự thấm nhuần cách máy tính duyệt qua các điều kiện if-elif-else. Nắm vững nó, các em sẽ có đủ tự tin để giải quyết một loạt các bài toán thực tế. Ở bài học tiếp theo, chúng ta sẽ khám phá một sức mạnh khác còn kinh ngạc hơn: khả năng lặp đi lặp lại một công việc hàng nghìn lần mà không biết mệt mỏi!

Comments are closed.