[trustindex no-registration=google]

Bài 92: Viết hàm cộng, trừ, nhân, chia hai 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.

Khuyến mãi đặc biệt thêm danh sách 10 bài tập nâng cao khả năng lập trình Python:

  1. Bài: 91 Học Python – Sử dụng hàm tìm số nhỏ nhất trong 2 số để tìm số nhỏ nhất trong 3 số mới nhất
  2. Bài 92: Viết hàm cộng, trừ, nhân, chia hai phân số
  3. Bài 93 Viết chương trình con tính tổng các phần tử trong một mảng
  4. Bài 94: Viết chương trình con tính tổng các phần tử chẵn trong một mảng
  5. Bài 95: Đếm số lượng số nguyên tố trong mảng bằng Python
  6. Bài 96 : Tính trung bình cộng các số nguyên tố trong mảng bằng Python
  7. Bài 97 Tính trung bình cộng các số chính phương trong mảng bằng Python
  8. Bài 98: Viết 2 chương trình con tìm Max, Min và vị trí của Max, Min
  9. 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

  10. Bài 100: Số Hoàn Hảo Hai Cách Kiểm Tra và So Sánh Hiệu Suất

Cách thực hiện

  1. Viết một lớp PhanSo để đại diện cho phân số với tử số và mẫu số.
  2. Viết các phương thức thực hiện các phép toán cộng, trừ, nhân, chia hai phân số.
  3. Rút gọn kết quả bằng cách chia cả tử số và mẫu số cho UCLN.

Chương trình Python

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.

5/5 - (1 bình chọn)
Vi Tính Tấn Dân

Mình rất đam mê về máy vi tính và máy in. Và mình đã đeo đuổi ước mơ và làm việc về máy vi tính mới đây mà đã 15 năm. Mình thích chia sẻ mọi kiến thức và kinh nghiệm mà mình có được cho tất cả các bạn ! Trong khi mình viết nếu có điều gì thiếu sót mong các bạn thông cảm cho mình nhé ! Mình Cám ơn trước !

Published by
Vi Tính Tấn Dân

Recent Posts

5 Bí kíp chinh phục Python Tài liệu ôn thi HSG Tin Học cấp Tỉnh 2026-2027

Cách Tải Tài liệu 5 Bí kíp chinh phục Python Tài liệu ôn thi HSG…

5 giờ ago

100 bài lập trình python có lời giải cơ bản đến nâng cao pdf

100 Bài Lập Trình Python Có Lời Giải Cơ Bản Đến Nâng Cao PDF –…

4 tuần ago

100 Đề Tổng Hợp Thi Tin Học Ứng Dụng Cơ Bản 2026 – 2027

100 Đề Tổng Hợp Thi Tin Học Ứng Dụng Cơ Bản – Đại học Khoa…

1 tháng ago

7 MẸO SỬA PC TẠI NHÀ NHANH GỌN CHO NGƯỜI KHÔNG RÀNH CÔNG NGHỆ

✅ Giới thiệu Bạn đang dùng PC thì đột nhiên đơ, chậm, xoay vòng mãi…

1 tháng ago

6 Dịch Vụ Sửa Laptop Tận Nhà – Nhanh Chóng, Uy Tín, An Toàn

Mở bài – Khó khăn khi laptop gặp sự cố nhưng không thể mang ra…

1 tháng ago

This website uses cookies.