Bài 17: Phân số với Python — ƯCLN, rút gọn, so sánh và cộng
🎯 Mục tiêu bài học: Em sẽ học cách dùng Python để làm việc với phân số: tìm ƯCLN (ước chung lớn nhất), rút gọn phân số, so sánh hai phân số và cộng hai phân số — những bài toán quen thuộc ở lớp 4-5.
Trong môn Toán, phân số 6/8 có thể rút gọn thành 3/4 bằng cách chia cả tử số và mẫu số cho cùng một số. Số tốt nhất để chia là ƯCLN. Tính ƯCLN bằng tay hơi lâu, nhưng Python có sẵn lệnh math.gcd làm ngay!
1. Tìm ƯCLN bằng math.gcd
Lệnh math.gcd(a, b) trả về ƯCLN của hai số a và b. Nhớ viết import math ở đầu chương trình.
ƯCLN là số lớn nhất chia hết cả tử số và mẫu số. Python tính giúp bằng math.gcd.
import math print(math.gcd(6, 8)) # 2 print(math.gcd(12, 18)) # 6
💡 Mẹo: gcd là viết tắt tiếng Anh của "ước chung lớn nhất" (greatest common divisor).
2. Rút gọn phân số
Để rút gọn phân số tu / mau, ta chia cả hai cho ƯCLN của chúng. Kết quả là phân số tối giản.
import math tu = 6 mau = 8 uc = math.gcd(tu, mau) print(tu // uc, "/", mau // uc) # 3 / 4
💡 Mẹo: Dùng dấu // (chia lấy phần nguyên) vì tử số và mẫu số luôn là số nguyên.
3. So sánh hai phân số
Muốn biết 2/3 hay 3/5 lớn hơn, ta quy đồng bằng cách nhân chéo: so sánh 2×5 với 3×3. Số nào lớn hơn thì phân số đó lớn hơn.
# So sanh 2/3 va 3/5 trai = 2 * 5 # 10 phai = 3 * 3 # 9 if trai > phai: print("2/3 lon hon 3/5")
💡 Mẹo: Nhân chéo là cách nhanh để so sánh: 2/3 và 3/5 → so 2×5 với 3×3.
4. Cộng hai phân số
Cộng 1/2 + 1/3: mẫu chung là 2×3 = 6. Tử số mới = 1×3 + 1×2 = 5. Kết quả là 5/6.
# Cong 1/2 + 1/3 tu1, mau1 = 1, 2 tu2, mau2 = 1, 3 mau = mau1 * mau2 tu = tu1 * mau2 + tu2 * mau1 print(tu, "/", mau) # 5 / 6
💡 Mẹo: Sau khi cộng, em có thể rút gọn kết quả bằng math.gcd như ở phần 2.
5. Gộp lại: cộng rồi rút gọn
Sau khi cộng được tu / mau, ta chia cả hai cho math.gcd(tu, mau) để ra phân số tối giản. Ví dụ 2/6 rút gọn thành 1/3.
import math tu, mau = 2, 6 uc = math.gcd(tu, mau) print(tu // uc, "/", mau // uc) # 1 / 3
🎯 Ghi nhớ: Công thức phân số với Python: math.gcd tìm ƯCLN, dấu // để rút gọn, nhân chéo để so sánh và cộng.
📋 Bảng ghi nhớ phân số
| Việc | Cách làm | Ví dụ |
|---|---|---|
| Tìm ƯCLN | math.gcd(a, b) | math.gcd(6, 8) = 2 |
| Rút gọn | chia cả hai cho ƯCLN | 6/8 → 3/4 |
| So sánh | nhân chéo | 2/3 vs 3/5 → 10 vs 9 |
| Cộng | quy đồng rồi cộng tử số | 1/2 + 1/3 = 5/6 |
✎ Luyện tập: 5 câu trắc nghiệm
Câu 1. ƯCLN của 6 và 8 là bao nhiêu?
Ước của 6 là 1,2,3,6; ước của 8 là 1,2,4,8. Ước chung lớn nhất là 2.
Câu 2. Phân số 6/8 rút gọn thành phân số nào?
Chia cả tử số và mẫu số cho ƯCLN = 2: 6:2=3 và 8:2=4, được 3/4.
Câu 3. Lệnh nào tính ƯCLN của 12 và 18 trong Python?
math.gcd(12, 18) trả về ƯCLN là 6. Nhớ import math trước.
Câu 4. Để so sánh 2/3 và 3/5 bằng cách nhân chéo, ta so sánh hai số nào?
Nhân chéo: tử số trái nhân mẫu phải (2×5=10) và tử số phải nhân mẫu trái (3×3=9). Vì 10>9 nên 2/3 lớn hơn.
Câu 5. Cộng 1/2 + 1/3 được kết quả nào?
Mẫu chung = 2×3 = 6. Tử số = 1×3 + 1×2 = 5. Kết quả 5/6.
💻 Thực hành: Chạy Python ngay trên trình duyệt
Hãy thử: Chương trình dưới cộng hai phân số rồi rút gọn kết quả. Đổi các số tu1, mau1, tu2, mau2 rồi bấm Chạy!
(Kết quả sẽ hiện ở đây sau khi em bấm Chạy)
🎉 Thử thách: Đổi thành 2/6 + 1/6 rồi chạy. Kết quả sau khi rút gọn có phải là 1/2 không?