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))