BÀI 19: CÂU LỆNH RẼ NHÁNH IF

Môn Tin học 10 - Chủ đề F: Giải quyết vấn đề với sự hỗ trợ của máy tính

1. Khởi động

Sau bài này em sẽ:

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.

<Điều kiện> Sai Đúng Lệnh 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ẽ:

3. Biểu thức lôgic

HOẠT ĐỘNG 1

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,b,s = 10,2,"Number" >>> a > 10 False >>> b < 3 True >>> s == "number" False

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ĩaKí 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
XYX and Y
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse
Phép toán or
XYX or Y
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse
Phép toán not
Xnot X
TrueFalse
FalseTrue

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:

>>> x, y, z = 10, 5, 9 >>> b = x < 11 and z > 5 >>> c = x > 15 or y < 9 >>> a = not b

Giải thích:

  • 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).
CÂU HỎI

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 == 0True.

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

HOẠT ĐỘNG 2

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".

if n > 0: print("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

if <điều kiện>: <khối lệnh>

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.

<Điều kiện> Sai Đúng Khối lệnh

Hình 19.2. Sơ đồ khối if dạng thiếu

4.2. Câu lệnh điều kiện dạng đủ

if <điều kiện>: <khối lệnh 1> else: <khối lệnh 2>

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ố:

if a > b: print(a - b) else: print(b - a)
<Điều kiện> Sai Đúng Khối lệnh 1 Khối lệnh 2

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.

CÂU HỎI

Đoạn chương trình sau thực hiện công việc gì?

k = int(input("Nhập một số nguyên dương: ")) if k <= 0: print("Bạn nhập sai rồi!")

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.

NHIỆM VỤ 1

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:

n = int(input("Nhập số tự nhiên n: ")) if n%2 == 0: print("Số đã nhập là số chẵn.") else: print("Số đã nhập là số lẻ.")
NHIỆM VỤ 2

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 <= 50 thì số tiền cần trả là k × 1.678.
  • Nếu 50 < k <= 100 thì số tiền cần trả là 50 × 1.678 + (k − 50) × 1.734.
  • Nếu 100 < k thì 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:

k = float(input("Nhập số kWh tiêu thụ điện nhà em: ")) if k<= 50: t = k*1.678 else: if k <= 100: t = 50*1.678 + (k-50)*1.734 else: t = 50*1.678 + 50*1.734 + (k-100)*2.014 print("Số tiền điện phải trả là:", round(t), "nghìn đồng")
main.py Đang kiểm tra thư viện...
Môi trường sẵn sàng. Đang đợi mã lệnh...

* 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

VẬN DỤNG 1

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ả.

VẬN DỤNG 2

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:

19.3. Viết biểu thức điều kiện

19.4. Xác định giá trị của a, b, c

a, b, c = 1, 2, 3 a = (a < b) and (b < c) b = (b < c) or (c%b==0) c = c%2 != 0

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ẩnPhân loại
< 18.5Thiếu cân (người gầy còm)
18.5 – 22.9Bình thường
>= 23Thừ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: