Bỏ qua để đến nội dung

Bài tập lập trình tổng hợp - Cơ bản

Trang này tổng hợp 100 bài tập lập trình Python cơ bản, sắp xếp theo chủ đề từ dễ đến khó. Nếu bạn đã làm quen với các kiến thức cơ bản, hãy thử sức với các bài tập nâng cao hơn ở trang Bài tập lập trình tổng hợp - Nâng cao.

Mỗi bài đều có phần đáp án gợi ý ở dưới, mặc định ẩn đi — bạn nên tự làm trước, sau đó bấm vào “Xem đáp án” để đối chiếu. Đáp án chỉ là một cách giải, không phải cách duy nhất.

(Một số bài được tham khảo, chuyển ngữ và điều chỉnh độ khó từ danh sách 100+ Python challenging programming exercises.)


1. Hello World

Viết chương trình in ra dòng chữ Hello, World!.

Xem đáp án
print("Hello, World!")

2. Tổng hai số

Đọc vào 2 số nguyên a, b từ bàn phím (dùng input()), in ra tổng của chúng.

Xem đáp án
while True:
try:
a = int(input("Nhập a: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
while True:
try:
b = int(input("Nhập b: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
print(a + b)

3. Chu vi và diện tích hình chữ nhật

Đọc vào chiều dài a và chiều rộng b. Tính chu vi (2*(a+b)) và diện tích (a*b).

Xem đáp án
while True:
try:
a = float(input("Chiều dài: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
b = float(input("Chiều rộng: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
print("Chu vi:", 2 * (a + b))
print("Diện tích:", a * b)

4. Đổi độ C sang độ F

Đọc vào nhiệt độ theo độ C, in ra nhiệt độ tương ứng theo độ F. Công thức: F = C * 9/5 + 32.

Xem đáp án
while True:
try:
c = float(input("Nhập độ C: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
f = c * 9 / 5 + 32
print(f"{c}°C = {f}°F")

5. Diện tích và chu vi hình tròn

Đọc vào bán kính r, tính chu vi (2*pi*r) và diện tích (pi*r^2), làm tròn 2 chữ số thập phân.

Xem đáp án
import math
while True:
try:
r = float(input("Nhập bán kính: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
print("Chu vi:", round(2 * math.pi * r, 2))
print("Diện tích:", round(math.pi * r ** 2, 2))

6. Đổi giây thành giờ:phút:giây

Đọc vào số giây s, in ra theo định dạng Giờ:Phút:Giây.

Ví dụ:

Input: 3665
Output: 1:1:5
Xem đáp án
while True:
try:
s = int(input("Nhập số giây: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
h = s // 3600
m = (s % 3600) // 60
sec = s % 60
print(f"{h}:{m}:{sec}")

7. Tính lũy thừa

Đọc vào 2 số nguyên an, in ra an (không dùng ** hoặc pow, dùng vòng lặp).

Xem đáp án
while True:
try:
a = int(input("Nhập a: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
result = 1
for _ in range(n):
result *= a
print(result)

8. Điểm trung bình

Đọc vào 3 điểm số Toán, Lý, Hóa. In ra điểm trung bình, làm tròn 1 chữ số thập phân.

Xem đáp án
while True:
try:
math_score = float(input("Điểm Toán: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
physics_score = float(input("Điểm Lý: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
chemistry_score = float(input("Điểm Hóa: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
print(round((math_score + physics_score + chemistry_score) / 3, 1))

9. Đảo ngược số có 2 chữ số

Đọc vào một số nguyên dương có 2 chữ số, in ra số đó khi đảo ngược 2 chữ số.

Ví dụ:

Input: 47
Output: 74
Xem đáp án
while True:
try:
n = int(input("Nhập số có 2 chữ số: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
tens = n // 10
ones = n % 10
print(ones * 10 + tens)

10. Hoán đổi giá trị 2 biến

Cho 2 biến a = 5, b = 10. Hoán đổi giá trị của chúng mà không dùng biến tạm, rồi in ra kết quả.

Xem đáp án
a, b = 5, 10
a, b = b, a
print("a =", a, ", b =", b)

11. Kiểm tra chẵn lẻ

Đọc vào một số nguyên n, in ra "Chẵn" nếu n chẵn, "Lẻ" nếu n lẻ.

Ví dụ:

Input: 7
Output: Lẻ
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
print("Chẵn" if n % 2 == 0 else "Lẻ")

12. Số dương, âm hay bằng 0

Đọc vào một số n. In "Dương" nếu n > 0, "Âm" nếu n < 0, "Bằng 0" nếu n == 0.

Ví dụ:

Input: -5
Output: Âm
Xem đáp án
while True:
try:
n = float(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
if n > 0:
print("Dương")
elif n < 0:
print("Âm")
else:
print("Bằng 0")

13. Số lớn nhất trong 3 số

Đọc vào 3 số a, b, c. In ra số lớn nhất (không dùng hàm max).

Ví dụ:

Input: a=7, b=12, c=9
Output: 12
Xem đáp án
while True:
try:
a = float(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
b = float(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
c = float(input("c: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
largest = a
if b > largest:
largest = b
if c > largest:
largest = c
print(largest)

14. Kiểm tra năm nhuận

Đọc vào năm N. In "Nhuận" nếu N chia hết cho 400, hoặc chia hết cho 4 nhưng không chia hết cho 100.

Ví dụ:

Input: 2024
Output: Nhuận
Xem đáp án
while True:
try:
n = int(input("Nhập năm: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
# Năm nhuận: chia hết cho 400, hoặc (chia hết cho 4 và không chia hết cho 100)
if n % 400 == 0 or (n % 4 == 0 and n % 100 != 0):
print("Nhuận")
else:
print("Không nhuận")

15. Xếp loại học lực

Đọc điểm trung bình diem (0-10). Xếp loại: >= 8: Giỏi, >= 6.5: Khá, >= 5: Trung bình, còn lại: Yếu.

Ví dụ:

Input: 7.2
Output: Khá
Xem đáp án
while True:
try:
score = float(input("Điểm trung bình: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
if score >= 8:
print("Giỏi")
elif score >= 6.5:
print("Khá")
elif score >= 5:
print("Trung bình")
else:
print("Yếu")

16. Kiểm tra tam giác

Đọc vào 3 số dương a, b, c. Kiểm tra 3 số đó có tạo thành tam giác hay không (tổng 2 cạnh bất kỳ phải lớn hơn cạnh còn lại).

Ví dụ:

Input: a=3, b=4, c=5
Output: Là tam giác
Xem đáp án
while True:
try:
a = float(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
b = float(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
c = float(input("c: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
if a + b > c and a + c > b and b + c > a:
print("Là tam giác")
else:
print("Không phải là tam giác")

17. Giải phương trình bậc nhất

Đọc vào 2 hệ số a, b của phương trình ax + b = 0. In ra nghiệm, hoặc thông báo phù hợp nếu vô nghiệm/vô số nghiệm.

Ví dụ:

Input: a=2, b=-4
Output: x = 2.0
Xem đáp án
while True:
try:
a = float(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
try:
b = float(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
if a == 0:
if b == 0:
print("Phương trình vô số nghiệm")
else:
print("Phương trình vô nghiệm")
else:
print("x =", -b / a)

18. Tính tiền điện

Đọc số điện tiêu thụ kwh. Giá: 50 số đầu 1,678đ/số; 50 số tiếp theo 1,734đ/số; từ số 101 trở lên 2,014đ/số. In ra tổng tiền phải trả.

Ví dụ:

Input: 120
Output: 210880 đồng
Xem đáp án
while True:
try:
kwh = int(input("Số điện tiêu thụ: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
if kwh <= 50:
cost = kwh * 1678
elif kwh <= 100:
cost = 50 * 1678 + (kwh - 50) * 1734
else:
cost = 50 * 1678 + 50 * 1734 + (kwh - 100) * 2014
print("Tiền điện:", cost, "đồng")

19. Kiểm tra ký tự

Đọc vào 1 ký tự. In ra đó là chữ cái in hoa, chữ cái in thường, chữ số, hay ký tự đặc biệt.

Ví dụ:

Input: A
Output: Chữ in hoa
Xem đáp án
while True:
c = input("Nhập 1 ký tự: ")
if len(c) == 1:
break
print("Vui lòng nhập đúng 1 ký tự!")
if c.isupper():
print("Chữ in hoa")
elif c.islower():
print("Chữ in thường")
elif c.isdigit():
print("Chữ số")
else:
print("Ký tự đặc biệt")

20. Máy tính đơn giản

Đọc vào 2 số a, b và 1 phép toán (+, -, *, /). In ra kết quả tương ứng.

Ví dụ:

Input: a=10, op=+, b=5
Output: 15.0
Xem đáp án
while True:
try:
a = float(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
while True:
op = input("Phép toán (+ - * /): ")
if op in ("+", "-", "*", "/"):
break
print("Vui lòng nhập đúng 1 trong các phép toán: + - * /")
while True:
try:
b = float(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số hợp lệ!")
if op == "+":
print(a + b)
elif op == "-":
print(a - b)
elif op == "*":
print(a * b)
else:
print(a / b if b != 0 else "Không thể chia cho 0")

21. In các số từ 1 đến n

Đọc vào số nguyên n, in ra các số từ 1 đến n, mỗi số trên 1 dòng.

Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for i in range(1, n + 1):
print(i)

22. Tính tổng 1 + 2 + … + n

Đọc vào n, tính tổng các số từ 1 đến n.

Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
total = 0
for i in range(1, n + 1):
total += i
print(total)

23. Tính giai thừa

Đọc vào n, tính n! (giai thừa của n).

Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
result = 1
for i in range(1, n + 1):
result *= i
print(result)

24. Bảng cửu chương

Đọc vào số n, in ra bảng cửu chương của n (từ n x 1 đến n x 10).

Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for i in range(1, 11):
print(f"{n} x {i} = {n * i}")

25. Đếm số chữ số của một số

Đọc vào một số nguyên dương, đếm xem nó có bao nhiêu chữ số.

Ví dụ:

Input: 12345
Output: 5
Xem đáp án
while True:
try:
n = int(input("Nhập số: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
count = 0
while n > 0:
n = n // 10
count += 1
print(count)

26. Tính tổng các chữ số

Đọc vào một số nguyên dương, tính tổng các chữ số của nó.

Ví dụ:

Input: 12345
Output: 15
Xem đáp án
while True:
try:
n = int(input("Nhập số: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
total = 0
while n > 0:
total += n % 10
n = n // 10
print(total)

27. Kiểm tra số nguyên tố

Đọc vào số nguyên dương n, kiểm tra n có phải số nguyên tố hay không.

Ví dụ:

Input: 17
Output: Là số nguyên tố
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
if n < 2:
print("Không phải số nguyên tố")
else:
is_prime = True
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
is_prime = False
break
print("Là số nguyên tố" if is_prime else "Không phải số nguyên tố")

28. In các số nguyên tố nhỏ hơn n

Đọc vào n, in ra tất cả các số nguyên tố nhỏ hơn n.

Ví dụ:

Input: 20
Output: 2 3 5 7 11 13 17 19
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for num in range(2, n):
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(num, end=" ")

29. Ước chung lớn nhất (ƯCLN)

Đọc vào 2 số nguyên dương a, b, tính ƯCLN của chúng (dùng thuật toán Euclid).

Ví dụ:

Input: a=48, b=18
Output: ƯCLN: 6
Xem đáp án
while True:
try:
a = int(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
while True:
try:
b = int(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
while b != 0:
a, b = b, a % b
print("ƯCLN:", a)

30. Bội chung nhỏ nhất (BCNN)

Đọc vào 2 số nguyên dương a, b, tính BCNN của chúng (dựa vào ƯCLN: BCNN = a*b / ƯCLN).

Ví dụ:

Input: a=4, b=6
Output: BCNN: 12
Xem đáp án
while True:
try:
a = int(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
while True:
try:
b = int(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
x, y = a, b
while y != 0:
x, y = y, x % y
gcd_value = x
print("BCNN:", a * b // gcd_value)

31. Dãy Fibonacci

Đọc vào n, in ra n số đầu tiên của dãy Fibonacci (0, 1, 1, 2, 3, 5, …).

Ví dụ:

Input: 7
Output: 0 1 1 2 3 5 8
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
a, b = 0, 1
for _ in range(n):
print(a, end=" ")
a, b = b, a + b

32. Số hoàn hảo

Một số được gọi là số hoàn hảo nếu nó bằng tổng các ước số dương nhỏ hơn nó (ví dụ: 6 = 1 + 2 + 3). In ra tất cả số hoàn hảo trong khoảng từ 1 đến n.

Ví dụ:

Input: 30
Output: 6 28
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for num in range(1, n + 1):
divisor_sum = sum(i for i in range(1, num) if num % i == 0)
if divisor_sum == num:
print(num, end=" ")

33. In hình tam giác dấu sao

Đọc vào n, in ra hình tam giác vuông bằng dấu *n dòng.

Ví dụ với n = 4:

*
**
***
****
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for i in range(1, n + 1):
print("*" * i)

34. In hình tam giác cân dấu sao

Đọc vào n, in ra hình tam giác cân bằng dấu *n dòng, căn giữa.

Ví dụ với n = 3:

*
***
*****
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for i in range(1, n + 1):
spaces = " " * (n - i)
stars = "*" * (2 * i - 1)
print(spaces + stars)

35. Đếm số lần xuất hiện

Đọc vào 1 số n, dùng vòng lặp while để đếm xem cần chia n cho 2 bao nhiêu lần thì về 1 (làm tròn xuống).

Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
count = 0
while n > 1:
n = n // 2
count += 1
print(count)

36. Đoán số (dùng while)

Cho trước một số bí mật secret = 42. Dùng vòng lặp while để yêu cầu người dùng nhập số cho đến khi đoán đúng, in "Đoán đúng rồi!" khi thành công.

Xem đáp án
secret = 42
guess = None
while guess != secret:
try:
guess = int(input("Đoán số: "))
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
continue
if guess < secret:
print("Thấp hơn")
elif guess > secret:
print("Cao hơn")
print("Đoán đúng rồi!")

37. Số Armstrong

Một số có 3 chữ số là số Armstrong nếu tổng lập phương các chữ số của nó bằng chính nó (ví dụ: 153 = 1^3 + 5^3 + 3^3). Kiểm tra một số nhập vào có phải số Armstrong không.

Ví dụ:

Input: 153
Output: Là số Armstrong
Xem đáp án
while True:
try:
n = int(input("Nhập số có 3 chữ số: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
hundreds = n // 100
tens = (n // 10) % 10
ones = n % 10
if hundreds ** 3 + tens ** 3 + ones ** 3 == n:
print("Là số Armstrong")
else:
print("Không phải số Armstrong")

38. break và continue

Đọc vào n, in ra các số từ 1 đến n, bỏ qua các số chia hết cho 3, và dừng hẳn khi gặp số chia hết cho 7.

Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
for i in range(1, n + 1):
if i % 7 == 0:
break
if i % 3 == 0:
continue
print(i)

39. Vòng lặp lồng nhau - in ma trận số

Đọc vào n, in ra ma trận vuông kích thước n x n chứa các số từ 1 đến n*n, theo hàng.

Ví dụ n = 3:

1 2 3
4 5 6
7 8 9
Xem đáp án
while True:
try:
n = int(input("Nhập n: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
num = 1
for row in range(n):
for col in range(n):
print(num, end=" ")
num += 1
print()

40. Số nguyên tố cùng nhau

Đọc vào 2 số a, b. Kiểm tra chúng có phải là 2 số nguyên tố cùng nhau không (ƯCLN bằng 1).

Ví dụ:

Input: a=8, b=9
Output: Nguyên tố cùng nhau
Xem đáp án
while True:
try:
a = int(input("a: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
while True:
try:
b = int(input("b: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
x, y = a, b
while y != 0:
x, y = y, x % y
print("Nguyên tố cùng nhau" if x == 1 else "Không phải nguyên tố cùng nhau")

41. Đếm số ký tự trong chuỗi

Đọc vào một chuỗi, in ra độ dài của chuỗi đó (không dùng len()).

Xem đáp án
s = input("Nhập chuỗi: ")
count = 0
for _ in s:
count += 1
print(count)

42. Đảo ngược chuỗi

Đọc vào một chuỗi, in ra chuỗi đó khi đảo ngược thứ tự ký tự.

Xem đáp án
s = input("Nhập chuỗi: ")
print(s[::-1])

43. Kiểm tra chuỗi đối xứng (Palindrome)

Đọc vào một chuỗi, kiểm tra chuỗi đó có phải là chuỗi đối xứng (palindrome) hay không.

Ví dụ:

Input: level
Output: Là palindrome
Xem đáp án
s = input("Nhập chuỗi: ")
print("Là palindrome" if s == s[::-1] else "Không phải palindrome")

44. Đếm số nguyên âm và phụ âm

Đọc vào một chuỗi, đếm số lượng nguyên âm (a, e, i, o, u) có trong chuỗi (không phân biệt hoa thường).

Ví dụ:

Input: Hello World
Output: 3
Xem đáp án
s = input("Nhập chuỗi: ").lower()
vowels = "vowels"
count = 0
for c in s:
if c in vowels:
count += 1
print(count)

45. Viết hoa chữ cái đầu mỗi từ

Đọc vào một câu, in ra câu đó với chữ cái đầu mỗi từ được viết hoa (không dùng .title()).

Ví dụ:

Input: toi yeu python
Output: Toi Yeu Python
Xem đáp án
s = input("Nhập câu: ")
words = s.split()
result = []
for word in words:
result.append(word[0].upper() + word[1:])
print(" ".join(result))

46. Đếm số lần xuất hiện của 1 ký tự

Đọc vào một chuỗi và một ký tự, đếm xem ký tự đó xuất hiện bao nhiêu lần trong chuỗi.

Ví dụ:

Input: s=banana, c=a
Output: 3
Xem đáp án
s = input("Nhập chuỗi: ")
c = input("Nhập ký tự cần đếm: ")
print(s.count(c))

47. Loại bỏ khoảng trắng thừa

Đọc vào một chuỗi có nhiều khoảng trắng liên tiếp, in ra chuỗi chỉ còn 1 khoảng trắng giữa các từ.

Ví dụ:

Input: " hello world "
Output: "hello world"
Xem đáp án
s = input("Nhập chuỗi: ")
print(" ".join(s.split()))

48. Kiểm tra Anagram

Đọc vào 2 chuỗi, kiểm tra chúng có phải là anagram của nhau không (chứa cùng các ký tự, khác thứ tự).

Ví dụ:

Input: s1=listen, s2=silent
Output: Là anagram
Xem đáp án
s1 = input("Chuỗi 1: ").replace(" ", "").lower()
s2 = input("Chuỗi 2: ").replace(" ", "").lower()
print("Là anagram" if sorted(s1) == sorted(s2) else "Không phải anagram")

49. Tìm từ dài nhất trong câu

Đọc vào một câu, in ra từ dài nhất trong câu đó.

Ví dụ:

Input: Hoc lap trinh rat thu vi
Output: trinh
Xem đáp án
s = input("Nhập câu: ")
words = s.split()
longest_word = words[0]
for word in words:
if len(word) > len(longest_word):
longest_word = word
print(longest_word)

50. Thay thế ký tự trong chuỗi

Đọc vào một chuỗi, thay tất cả các ký tự "a" bằng "@" (không dùng .replace()).

Ví dụ:

Input: banana
Output: b@n@n@
Xem đáp án
s = input("Nhập chuỗi: ")
result = ""
for c in s:
if c == "a":
result += "@"
else:
result += c
print(result)

51. Nối chuỗi từ danh sách

Cho một list các từ, ví dụ ["Toi", "yeu", "Python"]. In ra thành một câu, các từ cách nhau bởi dấu cách.

Xem đáp án
words = ["Toi", "yeu", "Python"]
print(" ".join(words))

52. Đếm số từ trong câu

Đọc vào một câu, đếm số lượng từ trong câu đó.

Ví dụ:

Input: Toi dang hoc Python
Output: 4
Xem đáp án
s = input("Nhập câu: ")
print(len(s.split()))

53. Kiểm tra chuỗi con

Đọc vào chuỗi s và chuỗi sub. Kiểm tra sub có phải là chuỗi con của s hay không.

Ví dụ:

Input: s=hello world, sub=lo wo
Output: Có chứa
Xem đáp án
s = input("Chuỗi gốc: ")
sub = input("Chuỗi con cần tìm: ")
print("Có chứa" if sub in s else "Không chứa")

54. Chuyển đổi hoa/thường

Đọc vào một chuỗi, in ra chuỗi đó với mọi ký tự thường thành hoa và ngược lại (không dùng .swapcase()).

Ví dụ:

Input: Hello World 123
Output: hELLO wORLD 123
Xem đáp án
s = input("Nhập chuỗi: ")
result = ""
for c in s:
if c.isupper():
result += c.lower()
elif c.islower():
result += c.upper()
else:
result += c
print(result)

55. Mã hóa Caesar đơn giản

Đọc vào một chuỗi chỉ gồm chữ thường và một số k. Mã hóa chuỗi bằng cách dịch mỗi ký tự đi k vị trí trong bảng chữ cái (chỉ xử lý 26 chữ cái a-z, có vòng lại từ đầu).

Ví dụ:

Input: s=abc, k=3
Output: def
Xem đáp án
s = input("Nhập chuỗi (chữ thường): ")
while True:
try:
k = int(input("Nhập k: "))
break
except ValueError:
print("Vui lòng nhập một số nguyên hợp lệ!")
result = ""
for c in s:
# Dịch chuyển vị trí trong bảng chữ cái, dùng % 26 để vòng lại từ đầu
new_position = (ord(c) - ord('a') + k) % 26
result += chr(new_position + ord('a'))
print(result)

56. Tính tổng và trung bình cộng của list

Cho một list số, tính tổng và trung bình cộng các phần tử.

Xem đáp án
numbers = [4, 8, 15, 16, 23, 42]
total = sum(numbers)
average = total / len(numbers)
print("Tổng:", total)
print("Trung bình:", average)

57. Tìm số lớn nhất, nhỏ nhất trong list

Cho một list số, tìm giá trị lớn nhất và nhỏ nhất (không dùng max(), min()).

Ví dụ:

Input: [4, 8, 15, 16, 23, 42]
Output: Lớn nhất: 42, Nhỏ nhất: 4
Xem đáp án
numbers = [4, 8, 15, 16, 23, 42]
largest = numbers[0]
smallest = numbers[0]
for n in numbers:
if n > largest:
largest = n
if n < smallest:
smallest = n
print("Lớn nhất:", largest)
print("Nhỏ nhất:", smallest)

58. Đảo ngược list

Cho một list, in ra list đó theo thứ tự đảo ngược (không dùng .reverse() hoặc [::-1]).

Xem đáp án
numbers = [1, 2, 3, 4, 5]
result = []
for i in range(len(numbers) - 1, -1, -1):
result.append(numbers[i])
print(result)

59. Loại bỏ phần tử trùng lặp

Cho một list có phần tử trùng lặp, tạo ra một list mới không có phần tử trùng, giữ nguyên thứ tự xuất hiện đầu tiên.

Ví dụ:

Input: [1, 2, 2, 3, 4, 4, 4, 5]
Output: [1, 2, 3, 4, 5]
Xem đáp án
numbers = [1, 2, 2, 3, 4, 4, 4, 5]
result = []
for n in numbers:
if n not in result:
result.append(n)
print(result)

60. Tìm số chẵn/lẻ trong list

Cho một list số nguyên, tạo ra 2 list mới chứa các số chẵn và các số lẻ.

Ví dụ:

Input: [1, 2, 3, 4, 5, 6, 7, 8]
Output: Số chẵn: [2, 4, 6, 8], Số lẻ: [1, 3, 5, 7]
Xem đáp án
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = []
odd_numbers = []
for n in numbers:
if n % 2 == 0:
even_numbers.append(n)
else:
odd_numbers.append(n)
print("Số chẵn:", even_numbers)
print("Số lẻ:", odd_numbers)

61. Sắp xếp list (Bubble Sort)

Cho một list số, sắp xếp tăng dần bằng thuật toán sắp xếp nổi bọt (bubble sort), không dùng .sort().

Ví dụ:

Input: [5, 2, 9, 1, 5, 6]
Output: [1, 2, 5, 5, 6, 9]
Xem đáp án
numbers = [5, 2, 9, 1, 5, 6]
n = len(numbers)
for i in range(n):
for j in range(0, n - i - 1):
if numbers[j] > numbers[j + 1]:
numbers[j], numbers[j + 1] = numbers[j + 1], numbers[j]
print(numbers)

62. Tìm kiếm tuần tự (Linear Search)

Cho một list và một giá trị cần tìm, trả về vị trí (index) của giá trị đó trong list, hoặc -1 nếu không tìm thấy.

Ví dụ:

Input: numbers=[10, 25, 3, 47, 8], target=47
Output: 3
Xem đáp án
numbers = [10, 25, 3, 47, 8]
target = 47
position = -1
for i in range(len(numbers)):
if numbers[i] == target:
position = i
break
print(position)

63. Tính tổng 2 ma trận

Cho 2 ma trận (list 2 chiều) cùng kích thước, tính ma trận tổng.

Ví dụ:

Input: a=[[1,2],[3,4]], b=[[5,6],[7,8]]
Output: [[6, 8], [10, 12]]
Xem đáp án
a = [[1, 2], [3, 4]]
b = [[5, 6], [7, 8]]
result = []
for i in range(len(a)):
row = []
for j in range(len(a[0])):
row.append(a[i][j] + b[i][j])
result.append(row)
print(result)

64. Làm phẳng list lồng nhau

Cho một list chứa các list con, ví dụ [[1, 2], [3, 4], [5]]. In ra một list phẳng chứa tất cả phần tử.

Ví dụ:

Input: [[1, 2], [3, 4], [5]]
Output: [1, 2, 3, 4, 5]
Xem đáp án
matrix = [[1, 2], [3, 4], [5]]
result = []
for row in matrix:
for element in row:
result.append(element)
print(result)

65. Trộn 2 list đã sắp xếp

Cho 2 list đã sắp xếp tăng dần, trộn chúng thành 1 list mới cũng tăng dần (không dùng sorted()).

Ví dụ:

Input: a=[1, 3, 5, 7], b=[2, 4, 6, 8, 10]
Output: [1, 2, 3, 4, 5, 6, 7, 8, 10]
Xem đáp án
a = [1, 3, 5, 7]
b = [2, 4, 6, 8, 10]
result = []
i, j = 0, 0
while i < len(a) and j < len(b):
if a[i] <= b[j]:
result.append(a[i])
i += 1
else:
result.append(b[j])
j += 1
result.extend(a[i:])
result.extend(b[j:])
print(result)

66. Tìm phần tử xuất hiện nhiều nhất

Cho một list, tìm phần tử xuất hiện nhiều lần nhất trong list đó.

Ví dụ:

Input: [1, 3, 2, 3, 4, 3, 2]
Output: 3
Xem đáp án
numbers = [1, 3, 2, 3, 4, 3, 2]
count = {}
for n in numbers:
count[n] = count.get(n, 0) + 1
most_frequent = max(count, key=count.get)
print(most_frequent)

67. Xoay list

Cho một list và một số k, xoay list sang phải k vị trí. Ví dụ [1,2,3,4,5] xoay 2 vị trí thành [4,5,1,2,3].

Ví dụ:

Input: numbers=[1, 2, 3, 4, 5], k=2
Output: [4, 5, 1, 2, 3]
Xem đáp án
numbers = [1, 2, 3, 4, 5]
k = 2
k = k % len(numbers)
result = numbers[-k:] + numbers[:-k]
print(result)

68. Kiểm tra list con

Cho 2 list ab, kiểm tra tất cả phần tử của b có nằm trong a không.

Ví dụ:

Input: a=[1, 2, 3, 4, 5], b=[2, 4]
Output: True
Xem đáp án
a = [1, 2, 3, 4, 5]
b = [2, 4]
is_sublist = all(element in a for element in b)
print(is_sublist)

69. Tính tổng đường chéo ma trận

Cho một ma trận vuông, tính tổng các phần tử trên đường chéo chính.

Ví dụ:

Input: [[1,2,3],[4,5,6],[7,8,9]]
Output: 15
Xem đáp án
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
total = 0
for i in range(len(matrix)):
total += matrix[i][i]
print(total)

70. Chia list thành các nhóm nhỏ

Cho một list và một số n, chia list thành các nhóm con có tối đa n phần tử.

Ví dụ:

Input: numbers=[1,2,3,4,5,6,7], n=3
Output: [[1, 2, 3], [4, 5, 6], [7]]
Xem đáp án
numbers = [1, 2, 3, 4, 5, 6, 7]
n = 3
groups = []
for i in range(0, len(numbers), n):
groups.append(numbers[i:i + n])
print(groups)

71. Đổi list thành tuple và ngược lại

Cho một list, chuyển thành tuple; sau đó chuyển tuple đó ngược lại thành list.

Xem đáp án
numbers = [1, 2, 3]
t = tuple(numbers)
print(t)
l = list(t)
print(l)

72. Đếm số lần xuất hiện của từ (dictionary)

Đọc vào một câu, đếm số lần xuất hiện của mỗi từ, lưu vào dictionary.

Ví dụ:

Input: "con meo con cho con meo"
Output: {'con': 3, 'meo': 2, 'cho': 1}
Xem đáp án
s = input("Nhập câu: ")
words = s.split()
count = {}
for w in words:
count[w] = count.get(w, 0) + 1
print(count)

73. Gộp 2 dictionary

Cho 2 dictionary, gộp chúng thành 1 dictionary mới. Nếu trùng key, lấy giá trị của dictionary thứ 2.

Ví dụ:

Input: a={"x": 1, "y": 2}, b={"y": 3, "z": 4}
Output: {'x': 1, 'y': 3, 'z': 4}
Xem đáp án
a = {"x": 1, "y": 2}
b = {"y": 3, "z": 4}
result = {**a, **b}
print(result)

74. Tìm key có giá trị lớn nhất trong dictionary

Cho một dictionary điểm số học sinh, ví dụ {"An": 8, "Binh": 9, "Chi": 7}. Tìm ra học sinh có điểm cao nhất.

Ví dụ:

Input: {"An": 8, "Binh": 9, "Chi": 7}
Output: Binh 9
Xem đáp án
score = {"An": 8, "Binh": 9, "Chi": 7}
top_student = max(score, key=score.get)
print(top_student, score[top_student])

75. Đảo ngược key-value của dictionary

Cho một dictionary, tạo ra dictionary mới với key và value bị đảo ngược cho nhau.

Ví dụ:

Input: {"a": 1, "b": 2, "c": 3}
Output: {1: 'a', 2: 'b', 3: 'c'}
Xem đáp án
d = {"a": 1, "b": 2, "c": 3}
result = {value: key for key, value in d.items()}
print(result)

76. Giao và hợp của 2 set

Cho 2 set số nguyên, tìm giao (phần tử chung) và hợp (tất cả phần tử) của chúng.

Ví dụ:

Input: a={1,2,3,4}, b={3,4,5,6}
Output: Giao: {3, 4}, Hợp: {1, 2, 3, 4, 5, 6}
Xem đáp án
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print("Giao:", a & b)
print("Hợp:", a | b)
print("Hiệu (a - b):", a - b)

77. Loại bỏ trùng lặp bằng set

Cho một list có phần tử trùng lặp, dùng set để loại bỏ trùng lặp, sau đó in ra dưới dạng list đã sắp xếp.

Ví dụ:

Input: [3, 1, 2, 3, 4, 1, 5]
Output: [1, 2, 3, 4, 5]
Xem đáp án
numbers = [3, 1, 2, 3, 4, 1, 5]
result = sorted(set(numbers))
print(result)

78. Danh bạ điện thoại đơn giản

Tạo một dictionary contacts lưu tên và số điện thoại. Viết chương trình cho phép thêm 1 người mới và in ra toàn bộ danh bạ.

Xem đáp án
contacts = {"An": "0901111111", "Binh": "0902222222"}
name = input("Tên người mới: ")
phone = input("Số điện thoại: ")
contacts[name] = phone
for name, phone in contacts.items():
print(f"{name}: {phone}")

79. Kiểm tra 2 tập hợp rời nhau

Cho 2 set, kiểm tra chúng có phần tử chung hay không (rời nhau nghĩa là không có phần tử chung).

Ví dụ:

Input: a={1,2,3}, b={4,5,6}
Output: True
Xem đáp án
a = {1, 2, 3}
b = {4, 5, 6}
print(a.isdisjoint(b))

80. Nhóm học sinh theo xếp loại (dictionary of list)

Cho một dictionary điểm học sinh, nhóm học sinh vào các loại “Giỏi” (>=8), “Khá” (>=6.5), “Trung bình” (còn lại).

Ví dụ:

Input: {"An": 9, "Binh": 7, "Chi": 5, "Dat": 6.8}
Output: {'Gioi': ['An'], 'Kha': ['Dat'], 'Trung binh': ['Binh', 'Chi']}
Xem đáp án
score = {"An": 9, "Binh": 7, "Chi": 5, "Dat": 6.8}
groups = {"Gioi": [], "Kha": [], "Trung binh": []}
for name, d in score.items():
if d >= 8:
groups["Gioi"].append(name)
elif d >= 6.5:
groups["Kha"].append(name)
else:
groups["Trung binh"].append(name)
print(groups)

81. Hàm kiểm tra số nguyên tố

Viết hàm is_prime(n) trả về True/False cho biết n có phải số nguyên tố không.

Xem đáp án
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
print(is_prime(17)) # True
print(is_prime(15)) # False

82. Hàm tính giai thừa

Viết hàm factorial(n) trả về giai thừa của n.

Xem đáp án
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
print(factorial(5)) # 120

83. Hàm với tham số mặc định

Viết hàm introduce(name, age=18) in ra câu giới thiệu, nếu không truyền age thì mặc định là 18.

Xem đáp án
def introduce(name, age=18):
print(f"Tôi tên là {name}, {age} tuổi.")
introduce("Phúc")
introduce("Lan", 20)

*84. Hàm với số lượng tham số bất kỳ (args)

Viết hàm tong(*so) nhận vào số lượng tham số bất kỳ và trả về tổng của chúng.

Xem đáp án
def total(*num):
return sum(num)
print(total(1, 2, 3)) # 6
print(total(1, 2, 3, 4, 5)) # 15

85. Hàm trả về nhiều giá trị

Viết hàm get_stats(numbers) trả về đồng thời giá trị nhỏ nhất, lớn nhất và trung bình cộng của một list số.

Xem đáp án
def get_stats(numbers):
return min(numbers), max(numbers), sum(numbers) / len(numbers)
smallest, largest, average = get_stats([4, 8, 15, 16, 23, 42])
print(smallest, largest, average)

86. Hàm lambda

Dùng hàm lambda để viết một hàm bình phương một số, và một hàm kiểm tra số chẵn.

Xem đáp án
square = lambda x: x ** 2
is_even = lambda x: x % 2 == 0
print(square(5)) # 25
print(is_even(4)) # True

87. Dùng map, filter với lambda

Cho list số [1, 2, 3, 4, 5, 6]. Dùng filter để lấy các số chẵn, dùng map để bình phương từng số chẵn đó.

Xem đáp án
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
square = list(map(lambda x: x ** 2, even_numbers))
print(even_numbers) # [2, 4, 6]
print(square) # [4, 16, 36]

88. Hàm chuyển đổi nhiệt độ

Viết 2 hàm c_to_f(c)f_to_c(f) để chuyển đổi qua lại giữa độ C và độ F.

Xem đáp án
def c_to_f(c):
return c * 9 / 5 + 32
def f_to_c(f):
return (f - 32) * 5 / 9
print(c_to_f(100)) # 212.0
print(f_to_c(32)) # 0.0

89. Hàm kiểm tra chuỗi Palindrome

Viết hàm is_palindrome(s) kiểm tra chuỗi s có phải là palindrome không, bỏ qua khoảng trắng và không phân biệt hoa/thường.

Xem đáp án
def is_palindrome(s):
s = s.replace(" ", "").lower()
return s == s[::-1]
print(is_palindrome("Level")) # True
print(is_palindrome("a man a plan a canal panama")) # True
print(is_palindrome("hello")) # False

90. Hàm đệ quy tính giai thừa

Viết hàm factorial(n) tính giai thừa bằng đệ quy (hàm tự gọi lại chính nó).

Xem đáp án
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
print(factorial(5)) # 120

91. Đệ quy tính tổng 1 đến n

Viết hàm đệ quy tong(n) tính tổng các số từ 1 đến n.

Xem đáp án
def total(n):
if n == 0:
return 0
return n + total(n - 1)
print(total(10)) # 55

92. Đệ quy tính số Fibonacci thứ n

Viết hàm đệ quy fib(n) trả về số Fibonacci thứ n (bắt đầu từ fib(0) = 0, fib(1) = 1).

Xem đáp án
def fib(n):
if n <= 1:
return n
return fib(n - 1) + fib(n - 2)
print(fib(10)) # 55

93. Đệ quy đảo ngược chuỗi

Viết hàm đệ quy reverse(s) trả về chuỗi s bị đảo ngược, không dùng s[::-1].

Xem đáp án
def reverse(s):
if len(s) <= 1:
return s
return reverse(s[1:]) + s[0]
print(reverse("python")) # nohtyp

94. Đệ quy tính ƯCLN

Viết hàm đệ quy gcd(a, b) tính ước chung lớn nhất của ab.

Xem đáp án
def gcd(a, b):
if b == 0:
return a
return gcd(b, a % b)
print(gcd(48, 18)) # 6

95. Đệ quy đếm số chữ số

Viết hàm đệ quy count_digits(n) đếm số lượng chữ số của số nguyên dương n.

Xem đáp án
def count_digits(n):
if n < 10:
return 1
return 1 + count_digits(n // 10)
print(count_digits(123456)) # 6

96. Ghi và đọc file văn bản

Ghi danh sách 3 câu vào file data.txt (mỗi câu 1 dòng), sau đó đọc lại và in ra từng dòng.

Xem đáp án
lines = ["Xin chao", "Toi hoc Python", "Rat vui!"]
with open("data.txt", "w", encoding="utf-8") as f:
for line in lines:
f.write(line + "\n")
with open("data.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())

97. Đếm số dòng, số từ trong file

Cho một file văn bản, đếm số dòng và tổng số từ có trong file đó.

Xem đáp án
with open("data.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
line_count = len(lines)
word_count = sum(len(line.split()) for line in lines)
print("Số dòng:", line_count)
print("Số từ:", word_count)

98. Xử lý lỗi chia cho 0

Viết chương trình đọc vào 2 số và chia chúng cho nhau, dùng try/except để xử lý trường hợp chia cho 0.

Xem đáp án
while True:
try:
a = float(input("a: "))
b = float(input("b: "))
break
except ValueError:
print("Vui lòng nhập số hợp lệ, hãy nhập lại!")
try:
print(a / b)
except ZeroDivisionError:
print("Lỗi: không thể chia cho 0")

99. Xử lý lỗi nhập liệu sai định dạng

Viết chương trình yêu cầu người dùng nhập một số nguyên, dùng try/except để bắt lỗi nếu người dùng nhập chữ thay vì số.

Xem đáp án
while True:
try:
n = int(input("Nhập một số nguyên: "))
break
except ValueError:
print("Lỗi: giá trị nhập vào không phải là số nguyên, hãy nhập lại!")
print("Bạn đã nhập:", n)

100. Tự định nghĩa Exception

Viết một class exception tùy chỉnh NegativeNumberError. Viết hàm check_positive(n) ném ra exception này nếu n âm.

Xem đáp án
class NegativeNumberError(Exception):
pass
def check_positive(n):
if n < 0:
raise NegativeNumberError(f"{n} là số âm, không hợp lệ")
return n
try:
check_positive(-5)
except NegativeNumberError as e:
print("Bắt được lỗi:", e)

Làm xong 100 bài này rồi? Tiếp tục với các bài khó hơn ở trang Bài tập lập trình tổng hợp - Nâng cao.