Chọn đến phần học sinh cần nhanh chóng thông qua mục lục bằng cách click đến phần đó
Câu hỏi mở đầu trang 101
Câu hỏi mở đầu
Đề bài: 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 hay không 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.
Lời giải:
Điền thông tin vào sơ đồ rẽ nhánh:
<Điều kiện>: Trời không mưa?- Đúng → Lệnh 1: Đi chơi cùng bạn.
- Sai → Lệnh 2: Ở nhà làm bài tập.
1. Biểu thức lôgic
Hoạt động 1 trang 101
Đề bài: 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.
Lời giải:
Điều kiện trong lệnh Nếu…thì phải là biểu thức lôgic (chỉ nhận giá trị True hoặc False).
| Biểu thức | Có là biểu thức lôgic không? | Lý do |
|---|---|---|
A. m, n = 1, 2 |
✗ Không | Đây là lệnh gán, không phải biểu thức so sánh. |
B. a + b > 1 |
✓ Có | Biểu thức so sánh, cho kết quả True hoặc False. |
C. a * b < a + b |
✓ Có | Biểu thức so sánh, cho kết quả True hoặc False. |
D. 12 + 15 > 2 * 13 |
✓ Có | Biểu thức so sánh, cho kết quả True hoặc False. |
→ Đáp án: B, C, D.
Câu hỏi củng cố mục 1 trang 102
Đề bà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
Lời giải:
Câu a) 100%4 == 0:
- $100 % 4 = 0$ (vì $100$ chia hết cho $4$).
- Vế trái bằng $0$, vế phải bằng $0$ → $0 == 0$ là True.
→ Kết quả: True.
Câu b) 111//5 != 20 or 20%3 != 0:
Tính từng vế của phép or:
- Vế trái: $111 // 5 = 22$ (vì $5 \times 22 = 110$), nên $22 \neq 20$ → True.
- Vế phải: $20 % 3 = 2$, nên $2 \neq 0$ → True.
- True
orTrue → True.
→ Kết quả: True.
2. Lệnh if
Hoạt động 2 trang 102
Đề bài: 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$ thì 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?
Lời giải:
Nhận xét về cấu trúc lệnh if:
- Lệnh
ifcó dạng:if <điều kiện>:rồi xuống dòng để viết lệnh thực hiện. - Sau
<điều kiện>có dấu hai chấm:. - Lệnh
print()được viết lùi vào (thường là $1$ tab hoặc $4$ dấu cách) so với từ khoáif, tạo thành khối lệnh thuộc vềif.
Câu hỏi củng cố mục 2 trang 103
Đề bà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!")
Lời giải:
Đoạn chương trình thực hiện các công việc sau:
- Dòng 1: Nhập một số nguyên $k$ từ bàn phím.
- Dòng 2 – 3: Kiểm tra điều kiện $k \leq 0$:
- Nếu đúng (tức là $k$ không phải số nguyên dương) → in ra thông báo
"Bạn nhập sai rồi!". - Nếu sai (tức là $k > 0$, $k$ là số nguyên dương hợp lệ) → không làm gì.
- Nếu đúng (tức là $k$ không phải số nguyên dương) → in ra thông báo
→ Tóm lại: Đoạn chương trình kiểm tra xem người dùng có nhập đúng số nguyên dương không, nếu nhập sai (≤ 0) thì cảnh báo.
Thực hành trang 103 – 104
Nhiệm vụ 1 trang 103
Đề bài: 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 thực hành:
Ý tưởng: Dùng phép lấy số dư n%2 để kiểm tra:
- Nếu $n % 2 == 0$ → $n$ là số chẵn.
- Ngược lại → $n$ là số lẻ.
Em mở chế độ soạn thảo (File / New File) và gõ chương trình:
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ẻ.")
Ví dụ khi chạy (nhập $n = 7$):
Nhập số tự nhiên n: 7
Số đã nhập là số lẻ.
Nhiệm vụ 2 trang 104
Đề bài: Giả sử giá điện sinh hoạt được tính luỹ kế theo từng tháng như sau (giá tính theo từng kWh điện tiêu thụ):
- Mức từ $0$ đến $50$ kWh: giá mỗi kWh là $1{,}678$ nghìn đồng.
- Mức từ $51$ đến $100$ kWh: giá mỗi kWh là $1{,}734$ nghìn đồng.
- Từ mức $101$ trở lên: giá mỗi kWh là $2{,}014$ nghìn đồng.
Viết chương trình nhập số điện tiêu thụ trong tháng và tính số tiền điện phải trả.
Hướng dẫn thực hành:
Ý tưởng: Gọi $k$ là số kWh điện tiêu thụ. Theo cách tính luỹ kế:
- Nếu $k \leq 50$: tiền cần trả là $t = k \times 1{,}678$.
- Nếu $50 < k \leq 100$: $50$ kWh đầu tính giá $1{,}678$, phần dư $(k – 50)$ tính giá $1{,}734$:$$t = 50 \times 1{,}678 + (k – 50) \times 1{,}734$$
- Nếu $k > 100$: $50$ kWh đầu giá $1{,}678$, $50$ kWh tiếp giá $1{,}734$, phần dư $(k – 100)$ giá $2{,}014$:$$t = 50 \times 1{,}678 + 50 \times 1{,}734 + (k – 100) \times 2{,}014$$
Đây là cấu trúc rẽ nhánh lồng nhau (if trong else).
Em gõ chương trì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), "nghìn đồng")
Chú ý:
- Trong máy tính dùng dấu chấm
.để viết số thập phân (ví dụ1.678).- Lệnh
round(t)dùng để làm tròn số thực $t$.- Các khối lệnh bên trong
if/elseđều phải viết lùi vào và thẳng hàng.
Ví dụ khi chạy (nhập $k = 120$):
Nhập số kWh tiêu thụ điện nhà em: 120
Số tiền điện phải trả là: 211 nghìn đồng
Luyện tập trang 104
Luyện tập 1 trang 104
Đề bài: Viết biểu thức lôgic ứng với mỗi câu sau:
a) Số $x$ nằm trong khoảng $(0; 10)$.
b) Số $y$ nằm ngoài đoạn $[1; 2]$.
c) Số $z$ nằm trong đoạn $[0; 1]$ hoặc $[5; 10]$.
Lời giải:
Câu a) Số $x$ nằm trong khoảng $(0; 10)$:
Điều kiện: $0 < x < 10$, tức là $x > 0$ và $x < 10$.
→ Biểu thức Python:
x > 0 and x < 10
Câu b) Số $y$ nằm ngoài đoạn $[1; 2]$:
Điều kiện: $y < 1$ hoặc $y > 2$.
→ Biểu thức Python:
y < 1 or y > 2
Câu c) Số $z$ nằm trong đoạn $[0; 1]$ hoặc $[5; 10]$:
Điều kiện: ($0 \leq z \leq 1$) hoặc ($5 \leq z \leq 10$).
→ Biểu thức Python:
(z >= 0 and z <= 1) or (z >= 5 and z <= 10)
Chú ý phân biệt:
- Khoảng $(a; b)$: không lấy hai đầu, dùng
<,>.- Đoạn $[a; b]$: lấy cả hai đầu, dùng
<=,>=.
Luyện tập 2 trang 104
Đề bài: Tìm một vài giá trị $m$, $n$ thoả mãn các biểu thức sau:
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)
Lời giải:
Câu a) 100%m == 0 and n%5 != 0:
100%m == 0: $m$ là ước của $100$ → $m \in {1, 2, 4, 5, 10, 20, 25, 50, 100}$.n%5 != 0: $n$ không chia hết cho $5$.
→ Ví dụ: $m = 5$, $n = 3$.
Câu b) m%100 == 0 and m%400 != 0:
- $m$ chia hết cho $100$ nhưng không chia hết cho $400$.
→ Ví dụ: $m = 200$ (vì $200 \% 100 = 0$ và $200 \% 400 = 200 \neq 0$).
Một số giá trị khác: $m = 100, 300, 500, 600, 700$,…
Câu c) n%3 == 0 or (n%3 != 0 and n%4 == 0):
Biểu thức đúng khi: $n$ chia hết cho $3$ hoặc ($n$ không chia hết cho $3$ và $n$ chia hết cho $4$).
→ Ví dụ:
- $n = 3$ (chia hết cho $3$ → vế trái True).
- $n = 4$ (không chia hết cho $3$ nhưng chia hết cho $4$ → vế phải True).
Vận dụng trang 104
Vận dụng 1 trang 104
Đề bài: 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 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ả.
Lời giải:
Ý tưởng: Dùng câu lệnh if ... else:
- Nếu $kg < 5$ → tiền = $kg \times 12,000$.
- Ngược lại ($kg \geq 5$) → tiền = $kg \times 10,000$.
Chương trình:
kg = float(input("Nhập số kg cam đã mua: "))
if kg < 5:
tien = kg * 12000
else:
tien = kg * 10000
print("Số tiền phải trả là:", tien, "đồng")
Ví dụ khi chạy (nhập $kg = 6$):
Nhập số kg cam đã mua: 6
Số tiền phải trả là: 60000.0 đồng
Kiểm tra: Vì $6 \geq 5$ nên giá $10,000$/kg, số tiền $= 6 \times 10,000 = 60,000$ đồng. ✓
Vận dụng 2 trang 104
Đề bài: 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à nhuận hay không.
Lời giải:
Phân tích điều kiện năm nhuận:
Năm $n$ là năm nhuận khi:
$$(n \text{ chia hết cho } 400) \quad \text{HOẶC} \quad (n \text{ chia hết cho } 4 \text{ VÀ } n \text{ không chia hết cho } 100)$$
Viết sang Python:
n%400 == 0 or (n%4 == 0 and n%100 != 0)
Chương trình:
n = int(input("Nhập năm n: "))
if n%400 == 0 or (n%4 == 0 and n%100 != 0):
print("Năm", n, "là năm nhuận.")
else:
print("Năm", n, "không phải là năm nhuận.")
Ví dụ khi chạy:
- Với $n = 2024$ (chia hết cho $4$ và không chia hết cho $100$):
Nhập năm n: 2024 Năm 2024 là năm nhuận. - Với $n = 2023$:
Nhập năm n: 2023 Năm 2023 không phải là năm nhuận. - Với $n = 2000$ (chia hết cho $400$):
Nhập năm n: 2000 Năm 2000 là năm nhuận.
Chú ý: Cần đặt dấu ngoặc cho biểu thức
(n%4 == 0 and n%100 != 0)để Python hiểu đúng thứ tự ưu tiên của phépandvàor.

Thầy Phạm Thành Danh
(Người kiểm duyệt, ra đề)
Chức vụ: Trưởng ban biên soạn môn Tin Học THPT
Trình độ: Cử nhân Sư phạm Tin học, Chứng chỉ hạng II, Chứng chỉ Tin học, Ngoại ngữ B1
Kinh nghiệm: 8+ năm kinh nghiệm tại Trường THPT Thuận Hóa
