Dưới đây là 10 bài tập Python nâng cao hơn, kèm theo lời giải:
Bài 21: Tìm số lẻ 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ố lẻ lớn 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ẻ lớn nhất:", max(odd_numbers))
else:
print("Không có số lẻ")
Bài 22: Đếm số lần xuất hiện của ký tự trong chuỗi
Đề bài: Nhập vào một chuỗi và một ký tự, đếm số lần ký tự đó xuất hiện trong chuỗi.
Giải:
s = input("Nhập chuỗi: ")
c = input("Nhập ký tự cần đếm: ")
print(f"Ký tự '{c}' xuất hiện {s.count(c)} lần")
Bài 23: Chuyển đổi số thành chuỗi nhị phân, bát phân, thập lục phân
Đề bài: Nhập vào một số nguyên n, in ra dạng nhị phân, bát phân, thập lục phân của nó.
Giải:
n = int(input("Nhập số nguyên: "))
print(f"Nhị phân: {bin(n)[2:]}")
print(f"Bát phân: {oct(n)[2:]}")
print(f"Thập lục phân: {hex(n)[2:].upper()}")
Bài 24: Kiểm tra một danh sách có phải là dãy Fibonacci không
Đề bài: Nhập vào một danh sách số nguyên, kiểm tra xem nó có phải là dãy Fibonacci không.
Giải:
def is_fibonacci(lst):
a, b = 0, 1
fib_seq = [a, b]
while b <= max(lst):
a, b = b, a + b
fib_seq.append(b)
return all(x in fib_seq for x in lst)
lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
print("Danh sách là dãy Fibonacci" if is_fibonacci(lst) else "Danh sách không phải dãy Fibonacci")
Bài 25: Đảo ngược các từ trong câu
Đề bài: Nhập vào một câu, in ra câu đó với thứ tự từ bị đảo ngược.
Giải:
s = input("Nhập câu: ")
print("Câu sau khi đảo ngược:", " ".join(s.split()[::-1]))
Bài 26: Xóa tất cả nguyên âm trong chuỗi
Đề bài: Nhập vào một chuỗi, xóa tất cả nguyên âm (a, e, i, o, u) khỏi chuỗi đó.
Giải:
s = input("Nhập chuỗi: ")
vowels = "aeiouAEIOU"
result = "".join(c for c in s if c not in vowels)
print("Chuỗi sau khi xóa nguyên âm:", result)
Bài 27: Tính tổng chữ số của một số
Đề bài: Nhập vào một số nguyên, tính tổng các chữ số của số đó.
Giải:
n = int(input("Nhập số nguyên: "))
print(f"Tổng các chữ số của {n} là: {sum(int(digit) for digit in str(n))}")
Bài 28: Xáo trộn phần tử trong danh sách
Đề bài: Nhập vào một danh sách số nguyên, xáo trộn thứ tự của các phần tử ngẫu nhiên.
Giải:
import random
lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
random.shuffle(lst)
print("Danh sách sau khi xáo trộn:", lst)
Bài 29: Tìm số nhỏ nhất và lớn nhất trong danh sách mà không dùng min() và max()
Đề bài: Nhập vào một danh sách số nguyên, tìm số nhỏ nhất và lớn nhất mà không sử dụng hàm min() và max().
Giải:
lst = list(map(int, input("Nhập danh sách số nguyên: ").split()))
min_num, max_num = lst[0], lst[0]
for num in lst[1:]:
if num < min_num:
min_num = num
if num > max_num:
max_num = num
print(f"Số nhỏ nhất: {min_num}, Số lớn nhất: {max_num}")
Bài 30: Tính tổng các số chia hết cho 3 hoặc 5 trong khoảng từ 1 đến n
Đề bài: Nhập vào số nguyên n, tính tổng các số chia hết cho 3 hoặc 5 trong khoảng từ 1 đến n.
Giải:
n = int(input("Nhập số nguyên dương: "))
tong = sum(x for x in range(1, n + 1) if x % 3 == 0 or x % 5 == 0)
print(f"Tổng các số chia hết cho 3 hoặc 5 từ 1 đến {n} là: {tong}")