Cấu trúc rẽ nhánh là một dạng cấu trúc rất quan trọng không chỉ trong lập trình, mà còn hiện hữu phổ biến ở cuộc sống thực tế. Cụ thể đó là khi mà bạn đưa ra các quyết định, lựa chọn khác nhau ở các điều kiện cụ thể.
Lấy ví dụ như khi đi học, bạn có thể lựa chọn các phương tiện khác nhau dựa vào điều kiện thời tiết. Nếu trời nắng, thì bạn đi xe máy; còn nếu trời mưa thì bạn đi xe hơi.
Thông qua ví dụ trên, chúng ta có thể thấy điều kiện ở đây là "Trời có mưa?" và điều kiện này sẽ được thể hiện ở dạng câu hỏi. Như các bạn có thể thấy, với điều kiện khác nhau, thì đều sẽ đưa ra các hành động khác nhau. Đây được gọi là câu lệnh rẽ nhánh dạng đủ.
Ngoài ra, chúng ta có thể không đưa ra hành động ở một nhánh của điều kiện. Để đơn giản, hãy xét ví dụ sau, khi bạn cần đi mua bánh, nhưng do trời mưa thì bạn phải mang dù (ô). Rõ ràng, trong tình huống này, hành động mang dù sẽ được thực hiện, ngược lại, nếu trời không mưa thì bạn không cần thực hiện thêm điều gì. Cuối cùng, cả hai nhánh đều sẽ thực hiện việc "Đi mua bánh". Đây gọi là rẽ nhánh dạng thiếu.
Trong lập trình, chúng ta biểu diễn cấu trúc này bằng câu lệnh if-else với cú pháp như sau:
Cú pháp (dạng đủ):
if (<dieu-kien>):
<cau-lenh-dung>
else:
<cau-lenh-sai>
Với ví dụ đầu tiên, chúng ta có thể tạo ra một biến troi_mua để thể hiện trạng thái, và in ra lựa chọn như sau:
Nhiệm vụ 1. Viết chương trình nhập vào hai số thực a, b. Xuất ra số lớn hơn trong hai số.
Nhiệm vụ 2. Viết chương trình nhập vào số nguyên a. Xuất ra thông báo a chẵn hay lẻ.
Đối với câu lệnh rẽ nhánh dạng thiếu, chúng ta chỉ cần đơn giản bỏ đi phần "else". Do đó, cú pháp sẽ là:
Cú pháp (dạng thiếu):
if (<dieu_kien>):
<cau_lenh>
Dưới đây sẽ là đoạn chương trình mô tả ví dụ thứ 2:
Ở một số trường hợp, điều kiện rẽ nhánh của bạn có thể sẽ phức tạp hơn thay vì chỉ có đúng/sai. Ví dụ như nếu chúng ta xét đèn giao thông, chúng ta sẽ có 3 trường hợp khác nhau:
Đèn xanh: Chạy bình thường
Đèn vàng: Chạy chậm
Đèn đỏ: Dừng lại
Bởi vì điều kiện được truyền vào bên trong lệnh if chỉ có thể có dạng "đúng/sai". Nên ta có thể quy đổi các điều kiện trên thành
"Đèn có phải màu xanh?"
"Đèn có phải màu vàng?"
"Đèn có phải màu đỏ?"
Để biểu diễn cho ví dụ này, ta có thể vẽ lưu đồ như sau:
Lưu ý: Chúng ta không cần phải xét "Đèn có phải màu đỏ" bởi vì nếu cả hai điều kiện "Đèn là màu xanh" và "Đèn là màu vàng" là sai, thì chắc chắn đèn sẽ màu đỏ.
Để biểu diễn lưu đồ trên bằng Python, bạn hãy tham khảo đoạn chương trình sau:
Nhiệm vụ 3. Viết chương trình nhập số nguyên N. Xuất ra thông báo N "âm" hay "Dương". Nếu người dùng nhập số 0 thì xuất "Số 0"
Nhiệm vụ 4. Viết chương trình nhập 3 số nguyên a, b, c. Xuất ra số lớn nhất trong ba số đó
ví dụ:
Input | Output
--------------------------
3 5 4 | 5
Nhiệm vụ 6. Viết chương trình nhập vào 3 cạnh của tam giác, kiểm tra xem tam giác đó có cân hay không. Nếu là tam giác cân thì xuất "CAN", nếu không cân thì xuất "KHONG CAN"
ví dụ:
Input | Output
--------------------------
3 4 4 | CAN
Nhiệm vụ 7. Viết chương trình nhập vào 3 cạnh của tam giác, kiểm tra xem tam giác đó có vuông hay không. Nếu là tam giác vuông thì xuất "VUONG", nếu không cân thì xuất "KHONG VUONG"
ví dụ:
Input | Output
--------------------------
3 4 5 | VUONG
Nhiệm vụ 8. Viết chương trình nhập vào 3 cạnh của tam giác, kiểm tra xem tam giác đó có đều hay không. Nếu là tam giác đều thì xuất "DEU", nếu không cân thì xuất "KHONG DEU"
ví dụ:
Input | Output
--------------------------
5 5 5 | DUE
Tuy nhiên, bạn có thể nhận thấy rằng nếu các câu lệnh lồng vào nhau quá nhiều thì sẽ làm cho chương trình rất khó đọc. Tình huống này được gọi là "Pyramid of doom".
Bởi vì lý do đó, các nhà thiết kế ngôn ngữ Python đã tạo thêm một lệnh "else if" để gộp hai câu lệnh else-if liền kề nhau lại. Khi bạn có nhiều điều kiện khác nhau, bạn có thể dùng cú pháp như sau:
Cú pháp:
if (<dieu_kien_1>):
<cau_lenh_1>
elif (<dieu_kien_2>):
<cau_lenh_2>
else:
<cau_lenh>
Với ví dụ đèn giao thông, ta có thể viết tốt hơn bằng cấu trúc if-elif-else như sau.
Bai 1 - Tiền điện
Nhập vào chương trình số KW điện trong một tháng. Tính và xuất ra màn hình số tiền cần phải trả theo công thức sau:
Nếu số KW nhỏ hơn hoặc bằng 0 và lớn hơn 200 thì xuất ra màn hình "Nhap sai".
Nếu số KW bé hơn bằng 100 thì tính 2000 đ cho 1 KW.
Nếu số KW lớn hơn 100 thì tính những KW vượt 100 tính 2500 đ cho 1 KW.
Ví dụ:
Input: 20
Output: 40000
Các em có thể code trực tiếp trên tkncoder.net