Tin học 10 · SGK

Bài 19. Câu lệnh điều kiện if

CÂU LỆNH RẼ NHÁNH IF

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ột việc được thực hiện phụ thuộc vào một điều kiện. 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 nếu trời mưa 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 ở tình huống trên vào vị trí <Điều kiện> và lệnh tương ứng trong sơ đồ cấu trúc rẽ nhánh ở Hình 19.1.

1. 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 = 2
B. a + b > 1
C. a * b < a + b
D. 12 + 15 > 2 * 13

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 đơn giản nhất là các biểu thức so sánh số hoặc xâu kí tự. Trong Hoạt động 1, các phương án B, C, D là biểu thức lôgic.

Quan sát các lệnh sau để nhận biết kiểu dữ liệu lôgic

>>> a = 10
>>> b = 2
>>> s = "Number"
>>> a > 10
False (a > 10 là sai)
>>> b < 3
True
>>> s == "number"
False ("number" và "Number" là hai xâu có giá trị khác nhau)

Các phép so sánh các giá trị số trong Python:

nhỏ hơnlớn hơnnhau bằng
nhỏ hơn hoặc bằnglớn hơn hoặc bằngkhác nhau

Chú ý: Với xâu kí tự cũng có đầy đủ các phép so sánh (sẽ học sau).

Các phép toán trên kiểu dữ liệu lôgic bao gồm phép and (và), or (hoặc) và not (phủ định). Bảng: các phép toán lôgic như sau. 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:

Hình 19.1
Hình 19.1
Phép toán and
X and
TrueTrueTrue
TrueFalseFalse
FalseTrueFalse
FalseFalseFalse
Phép toán or
or
TrueTrueTrue
TrueFalseTrue
FalseTrueTrue
FalseFalseFalse
Phép toán not Phép toán not
not not
True TrueFalse False
False FalseTrue True
>>> x = 10
>>> y = 5
>>> z = 9
>>> b = x < 11 and z > 5
>>> c = x > 15 or y < 9
>>> a = not b

Giải thích. Ta có x = 10, y = 5, z = 9, do đó x < 11 là đúng, z > 5 đúng. Theo phép toán and, ta có b = (x < 11) and (z > 5) nhận giá trị đúng (theo bảng giá trị).

Ta lại có: x > 15 sai (vì x = 10) nhưng y < 9 đúng (vì y = 5). Theo phép toán or, suy ra c = (x > 15) or (y < 9) nhận giá trị đúng (theo bảng giá trị).

Cuối cùng, vì b là đúng nên a = not b sẽ nhận giá trị sai.

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

2. 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 hoặc nhập từ bàn phím). Đoạn chương trình sau kiểm tra 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?

Để 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:

Câu lệnh điều kiện dạng thiếu:

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

Nhóm khối lệnh tiếp theo cần viết lùi vào và thẳng hàng (dùng tab hay dấu cách).

Hình 19.2
Hình 19.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>, ngược lại thì bỏ qua, chuyển sang lệnh tiếp theo sau lệnh if.

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ệnh sau sẽ in ra giá trị tuyệt đối của hiệu hai số:

if a > b:
print(a - b)
else:
print(b - a)
Hình 19.3
Hình 19.3

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 hai chấm (:), cần viết lùi vào và thẳng hàng.

Đây là điểm khác biệt của Python với các ngôn ngữ lập trình khác.

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

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

THỰC HÀNH

Các bài tập 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 đó 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 n là số lẻ.

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ử giá điện 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ụ):

Viết chương trình nhập số điện tiêu thụ trong tháng của gia đình em và tính số tiền điện phải trả.

Hướng dẫn. Gọi k là số kWh đ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:

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 chấm để viết các số thập phân. Chương trình có thể như sau:

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))

LUYỆN TẬP

a) 100 % m == 0 and n % 5 == 0
b) m % 100 == 0 and m % 400 != 0
c) n % 3 == 0 or (n % 3 == 0 and n % 4 == 0)

VẬN DỤNG