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

Đă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 7

Dưới đây là 10 bài tập Python nâng cao hơn nữa, tập trung vào thuật toán, xử lý dữ liệu và tối ưu hóa.


Bài 61: Kiểm tra số Fibonacci

Đề bài: Nhập vào một số nguyên, kiểm tra xem số đó có thuộc dãy Fibonacci hay không.

Giải:

import math

def is_perfect_square(n):
    return math.isqrt(n) ** 2 == n

def is_fibonacci(n):
    return is_perfect_square(5 * n**2 + 4) or is_perfect_square(5 * n**2 - 4)

n = int(input("Nhập số nguyên: "))
print(f"{n} là số Fibonacci" if is_fibonacci(n) else f"{n} không phải số Fibonacci")

Bài 62: Tìm số xuất hiện nhiều thứ hai trong danh sách

Đề bài: Nhập vào một danh sách số nguyên, tìm số xuất hiện nhiều thứ hai.

Giải:

from collections import Counter

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

if len(counter) > 1:
    print("Số xuất hiện nhiều thứ hai:", counter[1][0])
else:
    print("Không có số xuất hiện nhiều thứ hai")

Bài 63: Tìm đường chéo phụ của ma trận

Đề bài: Nhập vào một ma trận vuông n x n, tính tổng các phần tử trên đường chéo phụ.

Giải:

n = int(input("Nhập kích thước ma trận: "))
matrix = [list(map(int, input().split())) for _ in range(n)]

anti_diagonal_sum = sum(matrix[i][n - i - 1] for i in range(n))
print(f"Tổng đường chéo phụ: {anti_diagonal_sum}")

Bài 64: Kiểm tra chuỗi con

Đề bài: Nhập vào hai chuỗi s1 và s2, kiểm tra xem s2 có phải chuỗi con của s1 không.

Giải:

s1 = input("Nhập chuỗi chính: ")
s2 = input("Nhập chuỗi con: ")

print(f"'{s2}' là chuỗi con của '{s1}'" if s2 in s1 else f"'{s2}' không phải chuỗi con của '{s1}'")

Bài 65: Tìm số âm lớn nhất trong danh sách

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

Giải:

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

if neg_numbers:
    print("Số âm lớn nhất:", max(neg_numbers))
else:
    print("Không có số âm")

Bài 66: Tìm tất cả các cặp số có tổng bằng k

Đề bài: Nhập vào một danh sách số nguyên và một số k, tìm tất cả các cặp số có tổng bằng k.

Giải:

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

pairs = [(x, y) for i, x in enumerate(lst) for y in lst[i + 1:] if x + y == k]
print("Các cặp số có tổng bằng k:", pairs)

Bài 67: Sắp xếp danh sách theo số chữ số

Đề bài: Nhập vào một danh sách số nguyên, sắp xếp danh sách theo số chữ số của từng số.

Giải:

lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
lst.sort(key=lambda x: len(str(abs(x))))
print("Danh sách sau khi sắp xếp:", lst)

Bài 68: Kiểm tra một ma trận có phải ma trận đối xứng không

Đề bài: Nhập vào một ma trận n x n, kiểm tra xem nó có phải ma trận đối xứng không.

Giải:

n = int(input("Nhập kích thước ma trận: "))
matrix = [list(map(int, input().split())) for _ in range(n)]

is_symmetric = all(matrix[i][j] == matrix[j][i] for i in range(n) for j in range(n))
print("Ma trận đối xứng" if is_symmetric else "Ma trận không đối xứng")

Bài 69: Đếm số nguyên tố trong một khoảng

Đề bài: Nhập vào hai số a và b, đếm số lượng số nguyên tố trong khoảng [a, b].

Giải:

def is_prime(n):
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

a, b = map(int, input("Nhập khoảng a, b: ").split())
prime_count = sum(1 for x in range(a, b + 1) if is_prime(x))
print(f"Số lượng số nguyên tố trong khoảng [{a}, {b}]: {prime_count}")

Bài 70: Chuyển danh sách số thành số lớn nhất có thể

Đề bài: Nhập vào một danh sách số nguyên, sắp xếp các số để tạo thành số lớn nhất có thể.

Giải:

from functools import cmp_to_key

def compare(x, y):
    return int(y + x) - int(x + y)

lst = input("Nhập danh sách số nguyên: ").split()
lst.sort(key=cmp_to_key(compare))
print("Số lớn nhất có thể tạo ra:", "".join(lst))

Bài viết liên quan