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.)
Nhóm 1: Input/Output và Toán học cơ bản
Phần tiêu đề “Nhóm 1: Input/Output và Toán học cơ bản”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 + 32print(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: 3665Output: 1:1:5Xem đá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 // 3600m = (s % 3600) // 60sec = s % 60print(f"{h}:{m}:{sec}")7. Tính lũy thừa
Đọc vào 2 số nguyên a và n, in ra a mũ n (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 = 1for _ 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: 47Output: 74Xem đá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 // 10ones = n % 10print(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, 10a, b = b, aprint("a =", a, ", b =", b)Nhóm 2: Cấu trúc rẽ nhánh (if/elif/else)
Phần tiêu đề “Nhóm 2: Cấu trúc rẽ nhánh (if/elif/else)”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: 7Output: 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: -5Output: ÂmXem đá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=9Output: 12Xem đá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 = aif b > largest: largest = bif 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: 2024Output: NhuậnXem đá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.2Output: 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=5Output: Là tam giácXem đá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=-4Output: x = 2.0Xem đá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: 120Output: 210880 đồngXem đá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 * 1678elif kwh <= 100: cost = 50 * 1678 + (kwh - 50) * 1734else: 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: AOutput: Chữ in hoaXem đá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=5Output: 15.0Xem đá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")Nhóm 3: Vòng lặp (for, while)
Phần tiêu đề “Nhóm 3: Vòng lặp (for, while)”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 = 0for 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 = 1for 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: 12345Output: 5Xem đá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 = 0while 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: 12345Output: 15Xem đá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 = 0while 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: 17Output: 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: 20Output: 2 3 5 7 11 13 17 19Xem đá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=18Output: ƯCLN: 6Xem đá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=6Output: BCNN: 12Xem đá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, bwhile y != 0: x, y = y, x % ygcd_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: 7Output: 0 1 1 2 3 5 8Xem đá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, 1for _ in range(n): print(a, end=" ") a, b = b, a + b32. 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: 30Output: 6 28Xem đá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 * có 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 * có 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 = 0while 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 = 42guess = 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: 153Output: Là số ArmstrongXem đá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 // 100tens = (n // 10) % 10ones = 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 34 5 67 8 9Xem đá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 = 1for 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=9Output: Nguyên tố cùng nhauXem đá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, bwhile 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")Nhóm 4: Chuỗi (String)
Phần tiêu đề “Nhóm 4: Chuỗi (String)”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 = 0for _ 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: levelOutput: Là palindromeXem đá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 WorldOutput: 3Xem đá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 pythonOutput: Toi Yeu PythonXem đá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=aOutput: 3Xem đá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=silentOutput: Là anagramXem đá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 viOutput: trinhXem đá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: bananaOutput: 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 PythonOutput: 4Xem đá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 woOutput: Có chứaXem đá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 123Output: hELLO wORLD 123Xem đá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=3Output: defXem đá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)Nhóm 5: List
Phần tiêu đề “Nhóm 5: List”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: 4Xem đá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=47Output: 3Xem đáp án
numbers = [10, 25, 3, 47, 8]target = 47
position = -1for 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: 3Xem đá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=2Output: [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 a và b, 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: TrueXem đá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: 15Xem đáp án
matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9],]
total = 0for 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=3Output: [[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)Nhóm 6: Tuple, Dictionary, Set
Phần tiêu đề “Nhóm 6: Tuple, Dictionary, Set”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 9Xem đá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: TrueXem đá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)Nhóm 7: Hàm (Function)
Phần tiêu đề “Nhóm 7: Hàm (Function)”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)) # Trueprint(is_prime(15)) # False82. 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)) # 12083. 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)) # 6print(total(1, 2, 3, 4, 5)) # 1585. 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 ** 2is_even = lambda x: x % 2 == 0
print(square(5)) # 25print(is_even(4)) # True87. 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) và 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.0print(f_to_c(32)) # 0.089. 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")) # Trueprint(is_palindrome("a man a plan a canal panama")) # Trueprint(is_palindrome("hello")) # False90. 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)) # 120Nhóm 8: Đệ quy (Recursion)
Phần tiêu đề “Nhóm 8: Đệ quy (Recursion)”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)) # 5592. Đệ 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)) # 5593. Đệ 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")) # nohtyp94. Đệ quy tính ƯCLN
Viết hàm đệ quy gcd(a, b) tính ước chung lớn nhất của a và b.
Xem đáp án
def gcd(a, b): if b == 0: return a return gcd(b, a % b)
print(gcd(48, 18)) # 695. Đệ 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)) # 6Nhóm 9: File và Exception Handling
Phần tiêu đề “Nhóm 9: File và Exception Handling”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.