Danh mục: 100 bài tập Python cơ bản có lời giải

95 Học Python – Đếm xem trong mảng có bao nhiêu số nguyên tố

Bài 95: Đếm số lượng số nguyên tố trong mảng bằng Python

Giới thiệu

Trong bài viết này, chúng ta sẽ viết một chương trình con để đếm số lượng số nguyên tố trong một mảng bằng Python. Chương trình sẽ có hai cách triển khai: một cách đơn giản và một cách tối ưu hơ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 hàm kiểm tra số nguyên tố.
  2. Viết một hàm đếm số nguyên tố trong mảng bằng vòng lặp.
  3. Viết một phiên bản tối ưu sử dụng phương pháp lọc danh sách.
  4. So sánh hai phương pháp để thấy sự khác biệt về hiệu suất.

Chương trình Python

Cách đơn giản

 

def la_so_nguyen_to(n):

    if n < 2:

        return False

    for i in range(2, int(n ** 0.5) + 1):

        if n % i == 0:

            return False

    return True




def dem_so_nguyen_to(mang):

    dem = 0

    for so in mang:

        if la_so_nguyen_to(so):

            dem += 1

    return dem




mang_so = [1, 2, 3, 4, 5, 6, 7, 11, 13, 17]

print("Số lượng số nguyên tố trong mảng:", dem_so_nguyen_to(mang_so))

 

Cách tối ưu

 

def la_so_nguyen_to(n):
    if n < 2:
        return False
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True
def dem_so_nguyen_to_toi_uu(mang):
    return sum(1 for so in mang if la_so_nguyen_to(so))
mang_so = [1, 2, 3, 4, 5, 6, 7, 11, 13, 17]
print("Số lượng số nguyên tố trong mảng:", dem_so_nguyen_to_toi_uu(mang_so))

 

So sánh hai cách

Phương phápƯu điểmNhược điểm
Vòng lặpDễ hiểu, phù hợp cho người mới họcHiệu suất thấp hơn
Dùng list comprehensionNgắn gọn, hiệu suất caoKhó hiểu hơn cho người mới

Kết luận

Cách sử dụng vòng lặp giúp hiểu rõ hơn về cách hoạt động của chương trình, nhưng nếu cần tối ưu hiệu suất, sử dụng list comprehension để đếm số nguyên tố là một lựa chọn tốt hơn.

94 Học Python – Viết chương trình con tính tổng các phần tử chẵn

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

Giới thiệu

Trong bài viết này, chúng ta sẽ viết một chương trình con để tính tổng các phần tử chẵn trong một mảng bằng Python. Chương trình sẽ có hai cách triển khai: một cách đơn giản và một cách tối ưu hơ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 hàm tính tổng các phần tử chẵn trong mảng bằng vòng lặp.
  2. Viết một phiên bản tối ưu sử dụng hàm sum() của Python với điều kiện lọc số chẵn.
  3. So sánh hai phương pháp để thấy sự khác biệt về hiệu suất.

Chương trình Python

Cách đơn giản

 

def tinh_tong_chan(mang):

    tong = 0

    for so in mang:

        if so % 2 == 0:

            tong += so

    return tong




mang_so = [1, 2, 3, 4, 5, 6]

print("Tổng các phần tử chẵn trong mảng:", tinh_tong_chan(mang_so))

 

Cách tối ưu

 

def tinh_tong_chan_toi_uu(mang):

    return sum(so for so in mang if so % 2 == 0)

mang_so = [1, 2, 3, 4, 5, 6]

print("Tổng các phần tử chẵn trong mảng:", tinh_tong_chan_toi_uu(mang_so))

 

So sánh hai cách

Phương phápƯu điểmNhược điểm
Vòng lặpDễ hiểu, phù hợp cho người mới họcHiệu suất thấp hơn
Hàm sum() với lọc số chẵnNgắn gọn, hiệu suất caoÍt linh hoạt hơn

Kết luận

Cách sử dụng vòng lặp giúp hiểu rõ hơn về cách hoạt động của chương trình, nhưng nếu cần tối ưu hiệu suất, sử dụng sum() với điều kiện lọc số chẵn là một lựa chọn tốt hơn.

 

93 Học Python – Viết chương trình con tính tổng các phần tử

Bài 93 Viết chương trình con tính tổng các phần tử trong một mảng

Giới thiệu

Trong bài viết này, chúng ta sẽ viết một chương trình con để tính tổng các phần tử trong một mảng bằng Python. Chương trình sẽ có hai cách triển khai: một cách đơn giản và một cách tối ưu hơ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 hàm tính tổng các phần tử trong mảng bằng vòng lặp.
  2. Viết một phiên bản tối ưu sử dụng hàm sum() của Python.
  3. So sánh hai phương pháp để thấy sự khác biệt về hiệu suất.

Chương trình Python

Cách đơn giản

 

def tinh_tong_mang(mang):

    tong = 0

    for so in mang:

        tong += so

    return tong




mang_so = [1, 2, 3, 4, 5]

print("Tổng của mảng:", tinh_tong_mang(mang_so))

Cách tối ưu

def tinh_tong_mang_toi_uu(mang):

    return sum(mang)




mang_so = [1, 2, 3, 4, 5]

print("Tổng của mảng:", tinh_tong_mang_toi_uu(mang_so))

 

So sánh hai cách

Phương phápƯu điểmNhược điểm
Vòng lặpDễ hiểu, phù hợp cho người mới họcHiệu suất thấp hơn
Hàm sum()Ngắn gọn, hiệu suất caoÍt linh hoạt hơn

Kết luận

Cách sử dụng vòng lặp giúp hiểu rõ hơn về cách hoạt động của chương trình, nhưng nếu cần tối ưu hiệu suất, sử dụng sum() là một lựa chọn tốt hơn.

92 Học Python – Viết hàm cộng trừ nhân chia 2 phân số mới nhất

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ểmNhược điểm
Hàm đơn giảnDễ hiểu, nhanh triển khaiKhông tiện mở rộng
Hướng đối tượngDễ bảo trì, mở rộng tốtPhứ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.

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

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

Giới thiệu

Trong bài viết này, chúng ta sẽ sử dụng một hàm tìm số nhỏ nhất trong hai số để tìm số nhỏ nhất trong ba số. Điều này giúp mã nguồn gọn gàng, dễ bảo trì và có thể tái sử dụng.

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 hàm tim_min_2_so(a, b) để tìm số nhỏ nhất giữa hai số.
  2. Sử dụng hàm trên để tìm số nhỏ nhất giữa ba số bằng cách so sánh số thứ ba với kết quả của tim_min_2_so(a, b).
  3. Nhập ba số từ người dùng và hiển thị kết quả.

Chương trình Python

 

def tim_min_2_so(a, b):

    return a if a < b else b




def tim_min_3_so(a, b, c):

    return tim_min_2_so(tim_min_2_so(a, b), c)




# Nhập ba số từ người dùng

a = int(input("Nhập số thứ nhất: "))

b = int(input("Nhập số thứ hai: "))

c = int(input("Nhập số thứ ba: "))




# Gọi hàm và hiển thị kết quả

ket_qua = tim_min_3_so(a, b, c)

print(f"Số nhỏ nhất trong ba số là: {ket_qua}")

 

Ví dụ chạy chương trình

Đầu vào:

Nhập số thứ nhất: 5

Nhập số thứ hai: 8

Nhập số thứ ba: 3

Đầu ra:

Số nhỏ nhất trong ba số là: 3

Ứng dụng của hàm tìm số nhỏ nhất

  • Giúp mã nguồn dễ đọc, dễ bảo trì.
  • Có thể tái sử dụng hàm tim_min_2_so trong các bài toán khác.
  • Giúp tối ưu hóa và tổ chức chương trình tốt hơn.

Kết luận

Sử dụng hàm tìm số nhỏ nhất trong hai số để tìm số nhỏ nhất trong ba số giúp chương trình trở nên rõ ràng và dễ hiểu hơn. Bạn có thể mở rộng phương pháp này để tìm số nhỏ nhất trong nhiều số hơn!

90 Học Python – Sử dụng hàm lồng nhau mới nhất 2025 – 2026

Bài 90: Sử dụng hàm lồng nhau trong Python

Giới thiệu

Hàm lồng nhau (nested function) là một hàm được định nghĩa bên trong một hàm khác. Trong bài viết này, chúng ta sẽ tìm hiểu về cách sử dụng hàm lồng nhau trong Python và các ứng dụng của 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. Định nghĩa một hàm bên trong một hàm khác.
  2. Sử dụng hàm lồng nhau để thực hiện các tác vụ cụ thể.
  3. Gọi hàm chính để thực thi chương trình.

Chương trình Python

 

def ham_chinh(x):

    def ham_phu(y):

        return y ** 2

   

    return ham_phu(x) + 10




# Nhập số từ người dùng

so = int(input("Nhập một số: "))




# Gọi hàm và hiển thị kết quả

ket_qua = ham_chinh(so)

print(f"Kết quả: {ket_qua}")

Ví dụ chạy chương trình

Đầu vào:

Nhập một số: 4

Đầu ra:

Kết quả: 26

Ứng dụng của hàm lồng nhau

  • Giúp mã nguồn gọn gàng, dễ quản lý.
  • Đóng gói logic cụ thể trong một hàm riêng biệt.
  • Hạn chế phạm vi sử dụng của một hàm con chỉ trong hàm chính.

Kết luận

Hàm lồng nhau là một công cụ mạnh mẽ giúp tổ chức mã nguồn hiệu quả hơn. Khi sử dụng đúng cách, chúng giúp chương trình dễ đọc, dễ bảo trì và tối ưu hơn. Hãy thử áp dụng vào các bài toán thực tế để hiểu rõ hơn nhé!

89 Học Python – Viết chương trình vẽ hình chữ nhật bằng dấu *

Bài 89: Vẽ hình chữ nhật bằng dấu * trong Python

Giới thiệu

Trong bài viết này, chúng ta sẽ viết một chương trình Python sử dụng chương trình con (hàm) để vẽ một hình chữ nhật bằng dấu *. Người dùng có thể nhập chiều rộng và chiều cao của hình chữ nhật.

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 81: Đếm số ký tự thường trong xâu bằng Python
  2. Bài 82: Tìm tên của một người trong chuỗi họ và tên bằng Python
  3. Bài 83 Tìm họ và chữ lót của một người từ chuỗi họ và tên bằng Python
  4. Bài 84: Tính chu vi và diện tích của tam giác có sử dụng hàm trong Python
  5. Bài 85: Viết hàm kiểm tra chia hết cho 5 trong Python
  6. Bài 86: Viết hàm tìm Ước Chung Lớn Nhất (UCLN) trong Python
  7. Bài 87: Viết hàm tính giai thừa n! trong Python
  8. Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python
  9. Bài 89: Vẽ hình chữ nhật bằng dấu * trong Python
  10. Bài 90: Sử dụng hàm lồng nhau trong Python

Cách thực hiện

  1. Viết một hàm nhận vào chiều rộng và chiều cao.
  2. Sử dụng vòng lặp để in từng dòng của hình chữ nhật.
  3. Gọi hàm và nhận dữ liệu từ người dùng.

Chương trình Python

 

def ve_hinh_chu_nhat(rong, cao):

    for _ in range(cao):

        print('*' * rong)




# Nhập chiều rộng và chiều cao từ người dùng

rong = int(input("Nhập chiều rộng của hình chữ nhật: "))

cao = int(input("Nhập chiều cao của hình chữ nhật: "))




# Gọi hàm vẽ hình chữ nhật

ve_hinh_chu_nhat(rong, cao)

 

Ví dụ chạy chương trình

Đầu vào:

Nhập chiều rộng của hình chữ nhật: 5

Nhập chiều cao của hình chữ nhật: 3

Đầu ra:

*****

*****

*****

Kết luận

Chương trình trên giúp người dùng dễ dàng vẽ hình chữ nhật với kích thước tùy chỉnh bằng dấu *. Bạn có thể mở rộng chương trình để vẽ các hình dạng khác hoặc thêm tùy chọn ký tự khác thay vì *. Chúc bạn học tốt Python!

88 Học Python – Viết hàm P(x,n) để tính giá trị x^n. mới nhất

Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python

Giới Thiệu

Hàm mũ P(x, n) tính giá trị của x lũy thừa n, tức là x^n. Bài viết này sẽ hướng dẫn ba cách viết hàm tính lũy thừa: sử dụng vòng lặp, đệ quy và thư viện có sẵn của Python.

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 81: Đếm số ký tự thường trong xâu bằng Python
  2. Bài 82: Tìm tên của một người trong chuỗi họ và tên bằng Python
  3. Bài 83 Tìm họ và chữ lót của một người từ chuỗi họ và tên bằng Python
  4. Bài 84: Tính chu vi và diện tích của tam giác có sử dụng hàm trong Python
  5. Bài 85: Viết hàm kiểm tra chia hết cho 5 trong Python
  6. Bài 86: Viết hàm tìm Ước Chung Lớn Nhất (UCLN) trong Python
  7. Bài 87: Viết hàm tính giai thừa n! trong Python
  8. Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python
  9. Bài 89: Vẽ hình chữ nhật bằng dấu * trong Python
  10. Bài 90: Sử dụng hàm lồng nhau trong Python

Cách Thực Hiện

Cách 1: Sử dụng vòng lặp (Cách thông thường)

  1. Khởi tạo biến kết quả result là 1.
  2. Dùng vòng lặp để nhân x với chính nó n lần.
  3. Trả về kết quả.

 

def tinh_luy_thua_vong_lap(x, n):

    result = 1

    for _ in range(n):

        result *= x

    return result

 

Cách 2: Sử dụng đệ quy (Tối ưu hơn với phân tích & chinh phục)

  1. Trường hợp cơ bản: Nếu n == 0, trả về 1.
  2. Trường hợp tổng quát: x^n = x * x^(n-1).
  3. Tối ưu hóa: Nếu n chẵn, ta có thể viết x^n = (x^(n/2))^2, giúp giảm số lần nhân.

 

def tinh_luy_thua_de_quy(x, n):

    if n == 0:

        return 1

    elif n % 2 == 0:

        half_power = tinh_luy_thua_de_quy(x, n // 2)

        return half_power * half_power

    else:

        return x * tinh_luy_thua_de_quy(x, n - 1)

 

Cách 3: Sử dụng thư viện math.pow() (Tối ưu nhất)

Python có hàm math.pow() giúp tính lũy thừa nhanh chóng và tối ưu.

 

import math
def tinh_luy_thua_math(x, n):
    return math.pow(x, n)

 

Chương Trình Hoàn Chỉnh

 

import math
def tinh_luy_thua_vong_lap(x, n):
    result = 1
    for _ in range(n):
        result *= x
    return result
def tinh_luy_thua_de_quy(x, n):
    if n == 0:
        return 1
    elif n % 2 == 0:
        half_power = tinh_luy_thua_de_quy(x, n // 2)
        return half_power * half_power
    else:
        return x * tinh_luy_thua_de_quy(x, n - 1)
def tinh_luy_thua_math(x, n):
    return math.pow(x, n)
# Nhập giá trị x và n
x = float(input("Nhập số thực x: "))
n = int(input("Nhập số nguyên dương n: "))
if n >= 0:
    print(f"{x}^{n} theo vòng lặp: {tinh_luy_thua_vong_lap(x, n)}")
    print(f"{x}^{n} theo đệ quy: {tinh_luy_thua_de_quy(x, n)}")
    print(f"{x}^{n} theo thư viện math: {tinh_luy_thua_math(x, n)}")
else:
    print("Vui lòng nhập số nguyên không âm.")

Ví Dụ Chạy Chương Trình

Nhập số thực x: 2

Nhập số nguyên dương n: 5

2^5 theo vòng lặp: 32

2^5 theo đệ quy: 32

2^5 theo thư viện math: 32.0

So Sánh Ba Cách

Phương phápƯu điểmNhược điểm
Vòng lặpĐơn giản, dễ hiểuChậm hơn so với cách tối ưu
Đệ quyTối ưu với thuật toán chia để trịCó thể gây lỗi tràn bộ nhớ nếu n quá lớn
math.pow()Nhanh chóng, tiện lợiTrả về kết quả kiểu float thay vì int

Kết Luận

Cả ba cách đều có ưu điểm riêng. Nếu muốn dễ hiểu, hãy dùng vòng lặp. Nếu cần tối ưu, hãy dùng đệ quy. Nếu muốn nhanh gọn, hãy dùng math.pow(). Chúc bạn học tốt Python!

87 Học Python – Viết hàm tính giai thừa n! mới nhất 2025

Bài 87: Viết hàm tính giai thừa n! trong Python

Giới Thiệu

Giai thừa của một số nguyên dương n (ký hiệu là n!) là tích của tất cả các số nguyên dương từ 1 đến n. Bài viết này hướng dẫn hai cách viết một hàm Python để tính giai thừa: cách sử dụng vòng lặp và cách tối ưu hóa bằng đệ quy hoặc thư viện có sẵ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 81: Đếm số ký tự thường trong xâu bằng Python
  2. Bài 82: Tìm tên của một người trong chuỗi họ và tên bằng Python
  3. Bài 83 Tìm họ và chữ lót của một người từ chuỗi họ và tên bằng Python
  4. Bài 84: Tính chu vi và diện tích của tam giác có sử dụng hàm trong Python
  5. Bài 85: Viết hàm kiểm tra chia hết cho 5 trong Python
  6. Bài 86: Viết hàm tìm Ước Chung Lớn Nhất (UCLN) trong Python
  7. Bài 87: Viết hàm tính giai thừa n! trong Python
  8. Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python
  9. Bài 89: Vẽ hình chữ nhật bằng dấu * trong Python
  10. Bài 90: Sử dụng hàm lồng nhau trong Python

Cách Thực Hiện

Cách 1: Sử dụng vòng lặp (Cách thông thường)

  1. Khởi tạo biến kết quả factorial là 1.
  2. Dùng vòng lặp để nhân các số từ 1 đến n.
  3. Trả về kết quả giai thừa.

 

def tinh_giai_thua_vong_lap(n):

    if n == 0 or n == 1:

        return 1

    factorial = 1

    for i in range(2, n + 1):

        factorial *= i

    return factorial

Cách 2: Sử dụng đệ quy (Cách tối ưu hơn)

  1. Trường hợp cơ bản: nếu n = 0 hoặc n = 1, trả về 1.
  2. Trường hợp tổng quát: n! = n × (n-1)!, gọi lại hàm với n-1.

 

def tinh_giai_thua_de_quy(n):

    if n == 0 or n == 1:

        return 1

    return n * tinh_giai_thua_de_quy(n - 1)

 

Cách 3: Sử dụng thư viện math (Cách tối ưu nhất)

Python cung cấp hàm math.factorial() giúp tính giai thừa nhanh chóng và tối ưu hơn.

 

import math
def tinh_giai_thua_math(n):
    return math.factorial(n)

 

Chương Trình Hoàn Chỉnh

 

import math
def tinh_giai_thua_vong_lap(n):
    if n == 0 or n == 1:
        return 1
    factorial = 1
    for i in range(2, n + 1):
        factorial *= i
    return factorial
def tinh_giai_thua_de_quy(n):
    if n == 0 or n == 1:
        return 1
    return n * tinh_giai_thua_de_quy(n - 1)
def tinh_giai_thua_math(n):
    return math.factorial(n)
# Nhập số nguyên dương n
n = int(input("Nhập số nguyên dương n: "))
if n >= 0:
    print(f"Giai thừa theo vòng lặp của {n}! là: {tinh_giai_thua_vong_lap(n)}")
    print(f"Giai thừa theo đệ quy của {n}! là: {tinh_giai_thua_de_quy(n)}")
    print(f"Giai thừa theo thư viện math của {n}! là: {tinh_giai_thua_math(n)}")
else:
    print("Vui lòng nhập số nguyên không âm.")

Ví Dụ Chạy Chương Trình

Nhập số nguyên dương n: 5

Giai thừa theo vòng lặp của 5! là: 120

Giai thừa theo đệ quy của 5! là: 120

Giai thừa theo thư viện math của 5! là: 120

So Sánh Ba Cách

Phương phápƯu điểmNhược điểm
Vòng lặpKhông cần gọi lại nhiều lần, dễ hiểuCó thể chậm với n rất lớn
Đệ quyCode ngắn gọn, dễ đọcCó thể gây lỗi tràn bộ nhớ nếu n quá lớn
math.factorial()Tối ưu nhất, nhanh chóngPhụ thuộc vào thư viện math

Kết Luận

Cả ba cách đều cho kết quả chính xác. Nếu bạn muốn hiểu rõ thuật toán, hãy dùng vòng lặp. Nếu thích cách tiếp cận đệ quy, hãy thử cách 2. Nếu cần hiệu suất tốt nhất, hãy sử dụng math.factorial(). Hy vọng bài viết hữu ích cho bạn!

86 Học Python – Viết hàm tìm UCLN mới nhất

Bài 86: Viết hàm tìm Ước Chung Lớn Nhất (UCLN) trong Python

Giới Thiệu

Ước chung lớn nhất (UCLN) của hai số nguyên dương là số nguyên dương lớn nhất chia hết cho cả hai số đó. Bài viết này hướng dẫn hai cách viết một hàm Python để tìm UCLN của hai số nguyên dương: cách thông thường và cách tối ưu hóa sử dụng thư viện có sẵ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 81: Đếm số ký tự thường trong xâu bằng Python
  2. Bài 82: Tìm tên của một người trong chuỗi họ và tên bằng Python
  3. Bài 83 Tìm họ và chữ lót của một người từ chuỗi họ và tên bằng Python
  4. Bài 84: Tính chu vi và diện tích của tam giác có sử dụng hàm trong Python
  5. Bài 85: Viết hàm kiểm tra chia hết cho 5 trong Python
  6. Bài 86: Viết hàm tìm Ước Chung Lớn Nhất (UCLN) trong Python
  7. Bài 87: Viết hàm tính giai thừa n! trong Python
  8. Bài 88: Viết hàm P(x, n) để tính giá trị x^n trong Python
  9. Bài 89: Vẽ hình chữ nhật bằng dấu * trong Python
  10. Bài 90: Sử dụng hàm lồng nhau trong Python

Cách Thực Hiện

Cách 1: Sử dụng thuật toán Euclid (Cách thông thường)

  1. Dùng phép chia liên tục để tìm UCLN.
  2. Lặp lại cho đến khi phần dư bằng 0.
  3. Trả về số cuối cùng là UCLN.

 

def tim_ucln_thuong(a, b):

    while b != 0:

        a, b = b, a % b

    return a

 

Cách 2: Sử dụng thư viện math (Cách tối ưu hóa)

Python cung cấp hàm math.gcd() giúp tính UCLN nhanh chóng và tối ưu hơn.

 

import math
def tim_ucln_toi_uu(a, b):
    return math.gcd(a, b)
Chương Trình Hoàn Chỉnh
import math
def tim_ucln_thuong(a, b):
    while b != 0:
        a, b = b, a % b
    return a
def tim_ucln_toi_uu(a, b):
    return math.gcd(a, b)
# Nhập hai số nguyên dương
a = int(input("Nhập số nguyên dương a: "))
b = int(input("Nhập số nguyên dương b: "))
# Kiểm tra và hiển thị kết quả
if a > 0 and b > 0:
    print(f"UCLN theo cách thường của {a} và {b} là: {tim_ucln_thuong(a, b)}")
    print(f"UCLN theo cách tối ưu của {a} và {b} là: {tim_ucln_toi_uu(a, b)}")
else:
    print("Vui lòng nhập hai số nguyên dương hợp lệ.")

 

Ví Dụ Chạy Chương Trình

Nhập số nguyên dương a: 56

Nhập số nguyên dương b: 98

UCLN theo cách thường của 56 và 98 là: 14

UCLN theo cách tối ưu của 56 và 98 là: 14

So Sánh Hai Cách

Phương phápƯu điểmNhược điểm
Thuật toán EuclidKhông cần thư viện ngoài, dễ hiểuHiệu suất chậm hơn khi dùng thư viện
math.gcd()Nhanh, tối ưu, tận dụng tối đa PythonPhụ thuộc vào thư viện math

Kết Luận

Cả hai cách đều cho kết quả chính xác. Nếu bạn muốn hiểu rõ thuật toán, hãy sử dụng cách 1. Nếu muốn viết mã nhanh và tối ưu hơn, hãy sử dụng math.gcd(). Hy vọng bài viết hữu ích cho bạn!