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