Dưới đây là 10 bài tập Python nâng cao hơn nữa, kèm theo lời giải:
Bài 31: Tìm phần tử xuất hiện nhiều nhất trong danh sách
Đề bài: Nhập vào một danh sách số nguyên, tìm phần tử xuất hiện nhiều nhất.
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 = counter.most_common(1)[0]
print(f"Phần tử xuất hiện nhiều nhất: {most_common[0]} ({most_common[1]} lần)")
Bài 32: Kiểm tra ma trận vuông
Đề bài: Nhập vào một ma trận n x n, kiểm tra xem có phải ma trận vuông không.
Giải:
n = int(input("Nhập kích thước ma trận (n x n): "))
matrix = [list(map(int, input().split())) for _ in range(n)]
is_square = all(len(row) == n for row in matrix)
print("Đây là ma trận vuông" if is_square else "Không phải ma trận vuông")
Bài 33: Tính tổng đường chéo chính của ma trận
Đề bài: Nhập vào ma trận vuông n x n, tính tổng các phần tử trên đường chéo chính.
Giải:
n = int(input("Nhập kích thước ma trận: "))
matrix = [list(map(int, input().split())) for _ in range(n)]
diagonal_sum = sum(matrix[i][i] for i in range(n))
print(f"Tổng đường chéo chính là: {diagonal_sum}")
Bài 34: Tính tổng của một danh sách số nguyên không dùng vòng lặp
Đề bài: Viết chương trình tính tổng các phần tử trong danh sách mà không dùng vòng lặp.
Giải:
lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
print(f"Tổng các phần tử: {sum(lst)}")
Bài 35: Tìm phần tử duy nhất trong danh sách (phần tử không lặp lại)
Đề bài: Nhập vào một danh sách số nguyên, tìm các phần tử chỉ xuất hiện đúng một lần.
Giải:
from collections import Counter
lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
counter = Counter(lst)
unique_elements = [key for key, value in counter.items() if value == 1]
print("Các phần tử duy nhất:", unique_elements)
Bài 36: Kiểm tra danh sách có phải cấp số cộ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 cấp số cộng không.
Giải:
lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
is_arithmetic = all(lst[i] - lst[i - 1] == lst[1] - lst[0] for i in range(2, len(lst)))
print("Danh sách là cấp số cộng" if is_arithmetic else "Danh sách không phải cấp số cộng")
Bài 37: Nhân hai ma trận
Đề bài: Nhập vào hai ma trận n x m và m x p, tính tích của chúng.
Giải:
import numpy as np
n, m = map(int, input("Nhập kích thước ma trận A (n m): ").split())
A = [list(map(int, input().split())) for _ in range(n)]
m, p = map(int, input("Nhập kích thước ma trận B (m p): ").split())
B = [list(map(int, input().split())) for _ in range(m)]
result = np.dot(A, B)
print("Ma trận tích là:")
for row in result:
print(*row)
Bài 38: Kiểm tra chuỗi có phải anagram không
Đề bài: Nhập vào hai chuỗi, kiểm tra xem chúng có phải anagram của nhau không.
Giải:
from collections import Counter
s1 = input("Nhập chuỗi thứ nhất: ").replace(" ", "").lower()
s2 = input("Nhập chuỗi thứ hai: ").replace(" ", "").lower()
print("Hai chuỗi là anagram" if Counter(s1) == Counter(s2) else "Không phải anagram")
Bài 39: Giải phương trình bậc hai
Đề bài: Nhập vào ba số a, b, c, giải phương trình bậc hai ax^2 + bx + c = 0.
Giải:
import math
a, b, c = map(float, input("Nhập hệ số a, b, c: ").split())
delta = b**2 - 4*a*c
if delta < 0:
print("Phương trình vô nghiệm")
elif delta == 0:
print("Phương trình có nghiệm kép:", -b / (2 * a))
else:
x1 = (-b + math.sqrt(delta)) / (2 * a)
x2 = (-b - math.sqrt(delta)) / (2 * a)
print(f"Nghiệm của phương trình: x1 = {x1}, x2 = {x2}")
Bài 40: Tạo danh sách số Fibonacci bằng lập trình hàm
Đề bài: Viết chương trình tạo danh sách n số Fibonacci đầu tiên bằng lập trình hàm.
Giải:
from functools import lru_cache
@lru_cache(None)
def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
n = int(input("Nhập số lượng số Fibonacci: "))
print([fibonacci(i) for i in range(n)])