1. Khởi động
Sau bài này em sẽ:
- Biết và trình bày được các phép toán với kiểu dữ liệu lôgic.
- Sử dụng được lệnh rẽ nhánh
iftrong lập trình.
Trong cuộc sống, chúng ta vẫn thường gặp các tình huống mà việc được thực hiện hay không phụ thuộc vào một điều kiện nào đó. Ví dụ, em dự định: nếu ngày mai trời không mưa, em sẽ đi chơi cùng bạn, ngược lại trời mưa thì em sẽ ở nhà làm bài tập. Các tình huống như vậy trong lập trình được gọi là rẽ nhánh. Em hãy điền thông tin còn thiếu vào vị trí <Điều kiện> trong sơ đồ tương ứng với cấu trúc rẽ nhánh ở Hình 19.1.
Hình 19.1. Sơ đồ khối cấu trúc rẽ nhánh
2. Mục tiêu bài học
Sau khi hoàn thành bài học này, em sẽ:
- Biết và trình bày được khái niệm biểu thức lôgic, các phép so sánh và các phép toán lôgic
and,or,nottrong Python. - Nắm vững cú pháp và cách hoạt động của lệnh rẽ nhánh
ifdạng thiếu vàif - elsedạng đủ. - Viết được chương trình Python sử dụng lệnh
ifđể giải quyết các bài toán thực tế có kiểm tra điều kiện.
3. Biểu thức lôgic
Khái niệm biểu thức lôgic
Biểu thức nào sau đây có thể đưa vào vị trí <điều kiện> trong lệnh:
Nếu <điều kiện> thì <lệnh> của các ngôn ngữ lập trình bậc cao?
- A. m, n = 1, 2.
- B. a + b > 1.
- C. a * b < a + b.
- D. 12 + 15 > 2 * 13.
Đáp án: B, C và D — đây là những biểu thức so sánh, kết quả trả về Đúng hoặc Sai. Đáp án A (m, n = 1, 2) là một câu lệnh gán, không phải biểu thức lôgic, nên không thể đặt vào vị trí <điều kiện>.
Trong Python, biểu thức lôgic là biểu thức chỉ nhận giá trị True (đúng) hoặc False (sai). Biểu thức lôgic thường được tạo thành từ các phép so sánh giữa số hoặc xâu kí tự.
Quan sát các lệnh sau để nhận biết kiểu dữ liệu lôgic:
a > 10 là sai, b < 3 là đúng, s và "number" là hai xâu có giá trị khác nhau.
3.1. Các phép so sánh
| Kí hiệu | Ý nghĩa | Kí hiệu | Ý nghĩa |
|---|---|---|---|
< | nhỏ hơn | > | lớn hơn |
<= | nhỏ hơn hoặc bằng | >= | lớn hơn hoặc bằng |
== | bằng nhau | != | khác nhau |
Chú ý: Với xâu kí tự cũng có đầy đủ các phép so sánh trên (so sánh theo thứ tự từ điển).
3.2. Các phép toán lôgic: and, or, not
Các phép toán lôgic trên kiểu dữ liệu bool bao gồm phép and (và), or (hoặc) và not (phủ định). Bảng chân trị:
| Phép toán and | ||
|---|---|---|
| X | Y | X and Y |
| True | True | True |
| True | False | False |
| False | True | False |
| False | False | False |
| Phép toán or | ||
|---|---|---|
| X | Y | X or Y |
| True | True | True |
| True | False | True |
| False | True | True |
| False | False | False |
| Phép toán not | |
|---|---|
| X | not X |
| True | False |
| False | True |
Ví dụ
Cho các lệnh sau và dự đoán giá trị của các biến lôgic a, b, c:
Giải thích:
- Ta có
x = 10,z = 9nênx < 11là đúng,z > 5đúng. Theo bảng phép toán and thìb = x < 11 and z > 5nhận giá trị đúng. - Ta lại có:
x > 15sai (vì x = 10) nhưngy < 9đúng (vì y = 5). Theo bảng phép toán or suy rac = x > 15 or y < 9nhận giá trị đúng. - Cuối cùng, vì b là đúng nên
a = not bsẽ nhận giá trị sai.
- Biểu thức lôgic là biểu thức chỉ nhận giá trị True hoặc False. Giá trị của các biểu thức lôgic thuộc kiểu
bool. - Các phép toán trên kiểu dữ liệu lôgic là
and(và),or(hoặc) vànot(phủ định).
Mỗi biểu thức sau có giá trị True hay False?
- a)
100%4 == 0 - b)
111//5 != 20 or 20%3 != 0
a) 100%4 = 0, nên 100%4 == 0 là True.
b) 111//5 = 22 (khác 20) → vế trái True. Với phép or, chỉ cần một vế True là đủ, nên cả biểu thức là True (không cần xét vế phải).
4. Lệnh if
Cấu trúc lệnh if trong Python
Cho trước số tự nhiên n (được gán nhập từ bàn phím). Đoạn chương trình như bên dưới sẽ kiểm tra và in ra thông báo "n là số lớn hơn 0".
Em có nhận xét gì về cấu trúc lệnh if? Sau <điều kiện> lệnh if có kí tự gì? Lệnh print() được viết như thế nào?
Sau <điều kiện> của lệnh if luôn có dấu hai chấm :. Lệnh print() (khối lệnh bên trong if) được viết lùi vào so với dòng if, thẳng hàng nhau (mặc định 1 Tab hoặc 4 dấu cách).
Để xử lí các tình huống rẽ nhánh, giống như các ngôn ngữ lập trình khác, Python cũng có các câu lệnh để mô tả cấu trúc rẽ nhánh.
4.1. Câu lệnh điều kiện dạng thiếu
Khi thực hiện lệnh, Python sẽ kiểm tra <điều kiện>, nếu đúng thì thực hiện <khối lệnh>, ngược lại thì bỏ qua chuyển sang lệnh tiếp theo sau lệnh if.
Hình 19.2. Sơ đồ khối if dạng thiếu
4.2. Câu lệnh điều kiện dạng đủ
Khi thực hiện lệnh, Python sẽ kiểm tra <điều kiện>, nếu đúng thì thực hiện <khối lệnh 1>, ngược lại thì thực hiện <khối lệnh 2>.
Ví dụ, nếu a, b là hai số đã được tạo thì lệnh sau sẽ in ra giá trị tuyệt đối của hiệu số:
Hình 19.3. Sơ đồ khối if - else dạng đủ
Chú ý: Các khối lệnh trong if đều cần viết sau dấu ":" và lùi vào, thẳng hàng. Đây là điểm khác biệt của Python so với các ngôn ngữ lập trình khác.
Câu lệnh điều kiện if thể hiện cấu trúc rẽ nhánh trong Python. Khối lệnh rẽ nhánh của if được viết sau dấu ":", cần viết lùi vào và thẳng hàng.
Đoạn chương trình sau thực hiện công việc gì?
Chương trình nhập một số nguyên k từ bàn phím. Nếu k không phải số dương (tức k <= 0) thì in ra thông báo "Bạn nhập sai rồi!". Đây là lệnh if dạng thiếu, dùng để kiểm tra dữ liệu đầu vào có hợp lệ hay không.
5. Thực hành
Các bài liên quan đến kiểu dữ liệu bool và lệnh if.
Viết chương trình nhập số tự nhiên n từ bàn phím. Sau đó thông báo số em đã nhập là số chẵn hay số lẻ phụ thuộc vào n là chẵn hay lẻ.
Hướng dẫn. Để kiểm tra một số tự nhiên n là chẵn hay lẻ, ta dùng phép toán lấy số dư n%2. Nếu số dư bằng 0 thì n là số chẵn, ngược lại là số lẻ. Chương trình tham khảo:
Giả sử gia đình sinh hoạt trong khu vực gia đình em ở được tính luỹ kế theo từng tháng như sau (giá tính theo từng kWh điện tiêu thụ):
- Với mức điện tiêu thụ từ 0 đến 50 kWh, giá thành mỗi kWh là 1,678 nghìn đồng.
- Với mức từ 51 đến 100, giá thành mỗi kWh là 1,734 nghìn đồng.
- Từ mức 101 trở lên, giá thành mỗi kWh là 2,014 nghìn đồng.
Viết chương trình nhập số điện tiêu thụ của gia đình em. Khi đó theo cách tính luỹ kế trên chúng ta cần tính dựa trên các điều kiện sau:
- Nếu
k <= 50thì số tiền cần trả làk × 1.678. - Nếu
50 < k <= 100thì số tiền cần trả là50 × 1.678 + (k − 50) × 1.734. - Nếu
100 < kthì số tiền cần trả là:50 × 1.678 + 50 × 1.734 + (k − 100) × 2.014.
Hướng dẫn. Chúng ta sử dụng lệnh round(t) để làm tròn số thực t. Chú ý trong máy tính dùng dấu "." để viết các số thập phân. Chương trình tham khảo:
* Hệ thống sử dụng Skulpt (chạy hoàn toàn trên trình duyệt, an toàn và không cần cài đặt). Có giới hạn thời gian chạy để tránh kẹt vòng lặp vô hạn.
6. Luyện tập trắc nghiệm
Hãy kiểm tra lại kiến thức em vừa học. Hệ thống sẽ chấm điểm sau khi em hoàn thành 5 câu hỏi.
Đang tải câu hỏi...
7. Vận dụng
Giá bán cam tại siêu thị tính như sau: nếu khối lượng cam mua dưới 5 kg thì giá bán là 12 000 đồng/kg, nếu khối lượng cam mua lớn hơn hoặc bằng 5 kg thì giá bán là 10 000 đồng/kg. Viết chương trình nhập số lượng mua (tính theo kg) sau đó tính số tiền phải trả.
Năm n là năm nhuận nếu giá trị n thoả mãn điều kiện: n chia hết cho 400 hoặc n chia hết cho 4 đồng thời không chia hết cho 100. Viết chương trình nhập số năm n và cho biết năm n có phải là năm nhuận hay không.
Nhấn vào nút "Nạp bài vào Phòng thực hành" để tự động chuyển tới phần Thực hành và nạp sẵn mã nguồn — sau đó em có thể chỉnh sửa và nhấn Chạy mã để kiểm tra.
8. Bài tập và thực hành (19.1 – 19.12)
19.1. Viết biểu thức lôgic tương ứng
- a) Số x nhỏ hơn 50:
x < 50 - b) Số x nằm trong khoảng (50; 100]:
50 < x and x <= 100 - c) Số x nằm trong đoạn [0; 50] hoặc lớn hơn 100:
(0 <= x and x <= 50) or x > 100
19.2. Tìm giá trị m, n thoả mãn
Em hãy tìm một vài giá trị m, n thoả mãn các biểu thức sau:
- a)
50%m == 0 and n%4 != 0 - b)
m%100 == 0 and m%400 != 0 - c)
n%5 == 0 or (n%5 != 0 and n%3 == 0)
19.3. Viết biểu thức điều kiện
- a) m chia hết cho 100 nhưng không chia hết cho 400.
- b) x có giá trị không thuộc đoạn [0; 2].
- c) x có giá trị thuộc khoảng (2; 4) hoặc thuộc khoảng (5; 6).
19.4. Xác định giá trị của a, b, c
19.5. Câu lệnh điều kiện chẵn/lẻ
Viết câu lệnh điều kiện để in ra các thông báo tương ứng tuỳ theo giá trị của số nguyên n là số chẵn hay số lẻ.
19.6. Kiểm tra năm nhuận
Cho m là một năm dương lịch. Biết rằng, nếu m chia hết cho 400 hoặc m chia hết cho 4 nhưng không chia hết cho 100 thì năm đó là năm nhuận. Viết câu lệnh điều kiện để in ra thông báo tương ứng.
19.7. Chỉ số BMI
Chỉ số BMI (Body Mass Index) được tính dựa trên tỉ lệ giữa cân nặng (tính bằng kg) và chiều cao (tính bằng mét) bình phương, nói lên tình trạng cân nặng hiện tại của người trưởng thành (lớn hơn 18 tuổi). Với người trưởng thành gốc châu Á, giá trị BMI tiêu chuẩn được xác định như sau:
| Chỉ số BMI tiêu chuẩn | Phân loại |
|---|---|
| < 18.5 | Thiếu cân (người gầy còm) |
| 18.5 – 22.9 | Bình thường |
| >= 23 | Thừa cân |
Em hãy viết chương trình tính chỉ số BMI của một người và đưa ra thông báo tương ứng.
19.8. Khuyến mại mua cam
Để khuyến khích tiêu thụ cam, một chủ vườn đã đưa ra chính sách khuyến mại sau: Nếu số cam mua lớn hơn 10 kg thì đơn giá mua phần lớn hơn đó chỉ bằng 90% đơn giá cho 10 kg cam đầu tiên. Em hãy viết chương trình tính số tiền mua cam phải trả với đơn giá và số cam mua được nhập từ bàn phím.
19.9. Kiểm tra ba cạnh tam giác
Em hãy viết chương trình nhập ba số thực dương a, b, c, kiểm tra xem ba số đó có thể là độ dài các cạnh của một tam giác hay không, nếu có thì tính chu vi, diện tích của tam giác đó.
19.10. Phương trình bậc nhất
Em hãy viết chương trình giải phương trình bậc nhất dạng tổng quát ax + b = c, các hệ số a, b, c là các số thực được nhập vào từ bàn phím.
19.11. Phương trình bậc hai
Em hãy viết chương trình giải phương trình bậc hai dạng tổng quát ax² + bx + c = 0 (a khác 0). Yêu cầu các giá trị a, b, c là các số thực được nhập vào từ bàn phím.
19.12. Tiền điện theo đơn giá bậc thang
Tiền điện được tính theo đơn giá bậc thang như sau: đơn giá 1 được áp dụng cho 50 kWh điện tiêu thụ đầu tiên; đơn giá 2 được áp dụng cho mỗi 1 kW từ 51 cho tới 100; đơn giá 3 được áp dụng cho mỗi 1 kWh từ 101 tới 200 và đơn giá 4 áp dụng cho mỗi kWh từ 201 trở đi. Đơn giá và lượng điện tiêu thụ là các số nguyên được nhập vào từ bàn phím. Em hãy viết chương trình tính tiền điện phải nộp.
Gợi ý: hãy thử viết lời giải và chạy kiểm tra ngay trong Phòng thực hành mã lệnh.
9. Tổng kết bài học
Hoàn thành phần Luyện tập để xem điểm số của em!
Ghi nhớ cốt lõi:
- Biểu thức lôgic: chỉ nhận giá trị
True(Đúng) hoặcFalse(Sai). Kiểu dữ liệu tương ứng trong Python làbool. - Các phép toán: So sánh (
>, <, ==, !=, >=, <=) và Lôgic (and, or, not). - Cấu trúc rẽ nhánh:
- Dùng lệnhif(dạng thiếu) hoặcif - else(dạng đủ).
- Sau <điều kiện> bắt buộc phải có dấu hai chấm:.
- Khối lệnh bên trong phải được lùi vào và thẳng hàng.