Học Python - Bài 92 Viết hàm cộng trừ nhân chia 2 phân số
Giới thiệu
Trong bài viết này, chúng ta sẽ viết các hàm để thực hiện các phép toán cộng, trừ, nhân, chia hai phân số trong Python. Chúng ta sẽ sử dụng thư viện math để tìm ước chung lớn nhất (UCLN) giúp rút gọn phân số sau khi tính toán.
Bài 99 Học Python – Tính Số Fibonacci Hai cách tính và so sánh hiệu suất mới nhất
Cách thực hiện
Cách đơn giản
import math
def ucln(a, b):
return math.gcd(a, b)
def rut_gon(tu, mau):
u = ucln(tu, mau)
return tu // u, mau // u
def cong(ps1, ps2):
tu = ps1[0] * ps2[1] + ps2[0] * ps1[1]
mau = ps1[1] * ps2[1]
return rut_gon(tu, mau)
def tru(ps1, ps2):
tu = ps1[0] * ps2[1] - ps2[0] * ps1[1]
mau = ps1[1] * ps2[1]
return rut_gon(tu, mau)
def nhan(ps1, ps2):
return rut_gon(ps1[0] * ps2[0], ps1[1] * ps2[1])
def chia(ps1, ps2):
return rut_gon(ps1[0] * ps2[1], ps1[1] * ps2[0])
ps1 = (1, 2)
ps2 = (3, 4)
print("Tổng:", cong(ps1, ps2))
print("Hiệu:", tru(ps1, ps2))
print("Tích:", nhan(ps1, ps2))
print("Thương:", chia(ps1, ps2)) Cách tối ưu với hướng đối tượng
import math
class PhanSo:
def __init__(self, tu, mau):
if mau == 0:
raise ValueError("Mẫu số không thể bằng 0")
self.tu = tu
self.mau = mau
self.rut_gon()
def rut_gon(self):
ucln = math.gcd(self.tu, self.mau)
self.tu //= ucln
self.mau //= ucln
def __str__(self):
return f"{self.tu}/{self.mau}"
def cong(self, ps):
return PhanSo(self.tu * ps.mau + ps.tu * self.mau, self.mau * ps.mau)
def tru(self, ps):
return PhanSo(self.tu * ps.mau - ps.tu * self.mau, self.mau * ps.mau)
def nhan(self, ps):
return PhanSo(self.tu * ps.tu, self.mau * ps.mau)
def chia(self, ps):
if ps.tu == 0:
raise ValueError("Không thể chia cho 0")
return PhanSo(self.tu * ps.mau, self.mau * ps.tu)
ps1 = PhanSo(1, 2)
ps2 = PhanSo(3, 4)
print(f"Tổng: {ps1.cong(ps2)}")
print(f"Hiệu: {ps1.tru(ps2)}")
print(f"Tích: {ps1.nhan(ps2)}")
print(f"Thương: {ps1.chia(ps2)}")
So sánh hai cách
| Phương pháp | Ưu điểm | Nhược điểm |
| Hàm đơn giản | Dễ hiểu, nhanh triển khai | Không tiện mở rộng |
| Hướng đối tượng | Dễ bảo trì, mở rộng tốt | Phức tạp hơn |
Kết luận
Cả hai phương pháp đều có ưu điểm riêng. Nếu chỉ cần tính toán nhanh, có thể sử dụng cách đơn giản. Nếu muốn mã nguồn dễ bảo trì và mở rộng, hướng đối tượng là lựa chọn tốt hơn.
Bạn đang tìm kiếm nguồn tài liệu ôn thi học sinh giỏi Tin học lớp…
Phần 2: Tải ngay 200 Bài lập trình Python có lời giải cơ bản đến…
Tổng Hợp Các Hàm Python "Cốt Lõi" Khi Thi HSG Tỉnh Và Vào 10 Chuyên…
Nếu bạn đang ôn thi học sinh giỏi Tin học THCS cấp tỉnh Tiền Giang,…
Tổng Hợp 74 Đề Thi Học Sinh Giỏi Tin Học THCS Cấp Tỉnh Có Đáp…
Tổng hợp 75 Đề thi HSG Tin học THCS Python Cấp Tỉnh (Có Code Giải…
This website uses cookies.