Bài tập Python từ cơ bản đến nâng cao – Phần 5

Đăng ngày: 20/06/2026 • Tác giả: Quản trị viên
Bài tập Python từ cơ bản đến nâng cao – Phần 5

Dưới đây là 10 bài tập Python nâng cao tiếp theo, kèm theo lời giải:


Bài 41: Đếm số từ trong chuỗi

Đề bài: Nhập vào một chuỗi, đếm số từ trong chuỗi đó (các từ cách nhau bởi dấu cách).

Giải:

s = input("Nhập chuỗi: ")
word_count = len(s.split())
print(f"Số từ trong chuỗi: {word_count}")

Bài 42: Kiểm tra một số có phải số Armstrong không

Đề bài: Một số Armstrong là số mà tổng lũy thừa bậc n của từng chữ số bằng chính nó (ví dụ: 153 = 1³ + 5³ + 3³). Nhập vào một số nguyên và kiểm tra xem nó có phải số Armstrong không.

Giải:

n = int(input("Nhập số nguyên: "))
num_digits = len(str(n))
armstrong_sum = sum(int(digit) ** num_digits for digit in str(n))

print(f"{n} là số Armstrong" if armstrong_sum == n else f"{n} không phải số Armstrong")

Bài 43: Tìm số Fibonacci thứ n bằng quy hoạch động

Đề bài: Nhập vào số n, tính số Fibonacci thứ n bằng quy hoạch động để tối ưu thời gian.

Giải:

def fibonacci(n):
    fib = [0, 1]
    for i in range(2, n + 1):
        fib.append(fib[i - 1] + fib[i - 2])
    return fib[n]

n = int(input("Nhập n: "))
print(f"Số Fibonacci thứ {n} là: {fibonacci(n)}")

Bài 44: Đảo ngược số nguyên

Đề bài: Nhập vào một số nguyên n, in ra số n khi đảo ngược các chữ số.

Giải:

n = int(input("Nhập số nguyên: "))
reversed_n = int(str(abs(n))[::-1]) * (-1 if n < 0 else 1)
print(f"Số sau khi đảo ngược: {reversed_n}")

Bài 45: Tìm ước chung lớn nhất (GCD) của một danh sách số

Đề bài: Nhập vào một danh sách số nguyên, tìm GCD của toàn bộ danh sách.

Giải:

import math
from functools import reduce

lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
gcd_result = reduce(math.gcd, lst)
print(f"GCD của danh sách là: {gcd_result}")

Bài 46: Đếm số lần xuất hiện của từng phần tử trong danh sách

Đề bài: Nhập vào một danh sách số nguyên, đếm số lần xuất hiện của từng phần tử và in ra kết quả.

Giải:

from collections import Counter

lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
counter = Counter(lst)

for key, value in counter.items():
    print(f"{key}: {value} lần")

Bài 47: Kiểm tra số palindrome

Đề bài: Nhập vào một số nguyên, kiểm tra xem nó có phải số palindrome không (đọc xuôi hay ngược đều giống nhau).

Giải:

n = input("Nhập số nguyên: ")
print(f"{n} là số palindrome" if n == n[::-1] else f"{n} không phải số palindrome")

Bài 48: Tìm số lẻ nhỏ nhất trong danh sách

Đề bài: Nhập vào một danh sách số nguyên, tìm số lẻ nhỏ nhất. Nếu không có số lẻ, in ra “Không có số lẻ”.

Giải:

lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
odd_numbers = [x for x in lst if x % 2 != 0]

if odd_numbers:
    print("Số lẻ nhỏ nhất:", min(odd_numbers))
else:
    print("Không có số lẻ")

Bài 49: Kiểm tra danh sách có phải dãy số đối xứng không

Đề bài: Nhập vào một danh sách số nguyên, kiểm tra xem nó có phải dãy số đối xứng không.

Giải:

lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
print("Danh sách là đối xứng" if lst == lst[::-1] else "Danh sách không đối xứng")

Bài 50: Tính giai thừa của một số bằng lập trình hàm

Đề bài: Nhập vào số n, tính n! bằng lập trình hàm.

Giải:

from functools import reduce

n = int(input("Nhập số nguyên dương: "))
factorial = reduce(lambda x, y: x * y, range(1, n + 1), 1)
print(f"{n}! = {factorial}")

 

Bài viết liên quan