Python: Loops & Conditionals - 40 Practice Exercises

Python: Vòng Lặp & Điều Kiện - 40 Bài Tập Thực Hành

Mục tiêu: Rèn luyện kỹ năng sử dụng vòng lặp (for, while) và câu lệnh điều kiện (if/elif/else) thông qua 40 bài tập được chia thành 4 cấp độ.

Tier 1: Foundations (Nền Tảng) - Exercises 1-10

Cấp độ: Cơ bản - Vòng lặp đơn giản, điều kiện đơn giản

Bài Tập 1: In Số từ 1 đến n (Print Numbers 1 to n)

Đề bài: Nhập một số n. In ra tất cả các số từ 1 đến n, mỗi số trên một dòng.

Problem: Enter a number n. Print all numbers from 1 to n, one per line.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(1, n + 1): print(i)

Bài Tập 2: In Số Chẵn từ 2 đến n (Print Even Numbers 2 to n)

Đề bài: Nhập một số n. In ra tất cả các số chẵn từ 2 đến n.

Problem: Enter a number n. Print all even numbers from 2 to n.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(2, n + 1, 2): print(i)

Bài Tập 3: In n Dấu Sao (Print n Stars)

Đề bài: Nhập một số n. In ra n dấu sao (*) trên cùng một dòng.

Problem: Enter a number n. Print n asterisks (*) on the same line.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(n): print("*", end=" ") print()

Bài Tập 4: Nhập và In n Số (Input and Print n Numbers)

Đề bài: Nhập số lượng n, sau đó nhập n số nguyên. In lại mỗi số ngay sau khi nhập.

Problem: Enter count n, then enter n integers. Print each number immediately after input.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) print(number)

Bài Tập 5: Tổng của n Số (Sum of n Numbers)

Đề bài: Nhập số lượng n, sau đó nhập n số nguyên. Tính và in tổng của n số đó.

Problem: Enter count n, then n integers. Calculate and print the sum.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) total = 0 for i in range(n): number = int(input("Enter number: ")) total += number print(f"Sum: {total}")

Bài Tập 6: Bảng Cửu Chương (Multiplication Table)

Đề bài: Nhập một số n. In bảng cửu chương của n từ 1 đến 10.

Problem: Enter number n. Print multiplication table for n from 1 to 10.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(1, 11): print(f"{n} x {i} = {n * i}")

Bài Tập 7: Đếm Số Lượng (Count Numbers)

Đề bài: Nhập số lượng n, sau đó nhập n số bất kỳ. In ra 'Đã nhập n số'.

Problem: Enter count n, then enter n numbers. Print 'Entered n numbers'.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) print(f"Entered {n} numbers")

Bài Tập 8: Tam Giác Sao Tăng Dần (Increasing Star Triangle)

Đề bài: Nhập số n. In tam giác sao: dòng 1 có 1 sao, dòng 2 có 2 sao, ..., dòng n có n sao.

Problem: Enter n. Print star triangle: row 1 has 1 star, row 2 has 2 stars, ..., row n has n stars.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(1, n + 1): for j in range(i): print("*", end=" ") print()

Bài Tập 9: In Ngược từ n về 1 (Print n to 1 Reverse)

Đề bài: Nhập số n. In các số từ n về 1, mỗi số trên một dòng.

Problem: Enter n. Print numbers from n to 1, one per line.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(n, 0, -1): print(i)

Bài Tập 10: Lặp Lại Ký Tự (Repeat Character)

Đề bài: Nhập một ký tự và số n. In ký tự đó n lần trên cùng một dòng.

Problem: Enter a character and number n. Print that character n times on same line.

Solution (Đáp Án)

python
char = input("Enter character: ") n = int(input("Enter n: ")) for i in range(n): print(char, end=" ") print()

Tier 2: Intermediate (Trung Cấp) - Exercises 11-20

Cấp độ: Trung bình - Kết hợp vòng lặp với điều kiện

Bài Tập 11: Đếm Số Chẵn (Count Even Numbers)

Đề bài: Nhập n số nguyên. Đếm có bao nhiêu số chẵn.

Problem: Enter n integers. Count how many are even.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) count = 0 for i in range(n): number = int(input("Enter number: ")) if number % 2 == 0: count += 1 print(f"Even count: {count}")

Bài Tập 12: Tìm Số Lớn Nhất (Find Maximum)

Đề bài: Nhập n số nguyên. Tìm và in số lớn nhất.

Problem: Enter n integers. Find and print the maximum.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) max_num = float('-inf') for i in range(n): number = int(input("Enter number: ")) if number > max_num: max_num = number print(f"Maximum: {max_num}")

Bài Tập 13: Tìm Số Nhỏ Nhất (Find Minimum)

Đề bài: Nhập n số nguyên. Tìm và in số nhỏ nhất.

Problem: Enter n integers. Find and print the minimum.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) min_num = float('inf') for i in range(n): number = int(input("Enter number: ")) if number < min_num: min_num = number print(f"Minimum: {min_num}")

Bài Tập 14: Đếm Số Dương (Count Positive Numbers)

Đề bài: Nhập n số nguyên. Đếm có bao nhiêu số dương (lớn hơn 0).

Problem: Enter n integers. Count how many are positive (greater than 0).

Solution (Đáp Án)

python
n = int(input("Enter count: ")) count = 0 for i in range(n): number = int(input("Enter number: ")) if number > 0: count += 1 print(f"Positive count: {count}")

Bài Tập 15: Đếm Bội Số của 3 (Count Multiples of 3)

Đề bài: Nhập n số nguyên. Đếm có bao nhiêu số chia hết cho 3.

Problem: Enter n integers. Count how many are divisible by 3.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) count = 0 for i in range(n): number = int(input("Enter number: ")) if number % 3 == 0: count += 1 print(f"Count: {count}")

Bài Tập 16: Phân Loại Số (Categorize Numbers)

Đề bài: Nhập n số. Đếm có bao nhiêu số âm, số 0, và số dương.

Problem: Enter n numbers. Count negative, zero, and positive numbers.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) negative = 0 zero = 0 positive = 0 for i in range(n): number = int(input("Enter number: ")) if number < 0: negative += 1 elif number == 0: zero += 1 else: positive += 1 print(f"Negative: {negative}") print(f"Zero: {zero}") print(f"Positive: {positive}")

Bài Tập 17: Tính Trung Bình (Calculate Average)

Đề bài: Nhập n số. Tính và in trung bình cộng.

Problem: Enter n numbers. Calculate and print average.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) total = 0 for i in range(n): number = int(input("Enter number: ")) total += number average = total / n print(f"Average: {average:.1f}")

Bài Tập 18: In Số Chẵn (Print Even Numbers)

Đề bài: Nhập n số. Chỉ in ra các số chẵn.

Problem: Enter n numbers. Print only even numbers.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) if number % 2 == 0: print(number)

Bài Tập 19: Đếm Số Lẻ (Count Odd Numbers)

Đề bài: Nhập n số. Đếm có bao nhiêu số lẻ.

Problem: Enter n numbers. Count how many are odd.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) count = 0 for i in range(n): number = int(input("Enter number: ")) if number % 2 != 0: count += 1 print(f"Odd count: {count}")

Bài Tập 20: Tổng Số Dương (Sum Positive Numbers)

Đề bài: Nhập n số. Tính tổng của CHỈ các số dương.

Problem: Enter n numbers. Calculate sum of ONLY positive numbers.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) total = 0 for i in range(n): number = int(input("Enter number: ")) if number > 0: total += number print(f"Sum: {total}")

Tier 3: Advanced (Nâng Cao) - Exercises 21-30

Cấp độ: Nâng cao - Vòng lặp lồng nhau, điều kiện lồng nhau

Bài Tập 21: Tính Điểm Chữ (Grade Calculator)

Đề bài: Nhập n điểm (0-100). Với mỗi điểm, in điểm chữ: A (90-100), B (80-89), C (70-79), D (60-69), F (<60).

Problem: Enter n scores (0-100). For each, print letter grade: A (90-100), B (80-89), C (70-79), D (60-69), F (<60).

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): score = int(input("Enter score: ")) if score >= 90: print("A") elif score >= 80: print("B") elif score >= 70: print("C") elif score >= 60: print("D") else: print("F")

Bài Tập 22: Tính BMI (BMI Calculator)

Đề bài: Nhập cân nặng (kg) và chiều cao (m) của n người. Tính BMI và phân loại: Underweight (<18.5), Normal (18.5-24.9), Overweight (25-29.9), Obese (>=30).

Problem: Enter weight (kg) and height (m) of n people. Calculate BMI and categorize: Underweight (<18.5), Normal (18.5-24.9), Overweight (25-29.9), Obese (>=30).

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): weight = float(input("Weight (kg): ")) height = float(input("Height (m): ")) bmi = weight / (height * height) if bmi < 18.5: print("Underweight") elif bmi < 25: print("Normal") elif bmi < 30: print("Overweight") else: print("Obese")

Bài Tập 23: Tam Giác Vuông (Right Triangle)

Đề bài: Nhập số dòng n. In tam giác vuông bằng sao.

Problem: Enter rows n. Print right triangle with stars.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(1, n + 1): for j in range(i): print("*", end=" ") print()

Bài Tập 24: Kim Tự Tháp Số Đối Xứng (Symmetric Number Pyramid)

Đề bài: Nhập n. In kim tự tháp số: dòng 1 là '1', dòng 2 là '121', dòng 3 là '12321'.

Problem: Enter n. Print number pyramid: row 1 is '1', row 2 is '121', row 3 is '12321'.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(1, n + 1): # Ascending for j in range(1, i + 1): print(j, end="") # Descending for j in range(i - 1, 0, -1): print(j, end="") print()

Bài Tập 25: Hình Vuông (Square Pattern)

Đề bài: Nhập kích thước n. In hình vuông đặc bằng sao (n x n).

Problem: Enter size n. Print solid square with stars (n x n).

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(n): for j in range(n): print("*", end=" ") print()

Bài Tập 26: Chuyển Đổi Nhiệt Độ (Temperature Converter)

Đề bài: Nhập n nhiệt độ Celsius. Chuyển sang Fahrenheit và phân loại: Cold (<50°F), Moderate (50-80°F), Hot (>80°F).

Problem: Enter n Celsius temperatures. Convert to Fahrenheit and categorize: Cold (<50°F), Moderate (50-80°F), Hot (>80°F).

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): celsius = float(input("Enter Celsius: ")) fahrenheit = celsius * 9/5 + 32 if fahrenheit < 50: category = "Cold" elif fahrenheit <= 80: category = "Moderate" else: category = "Hot" print(f"{fahrenheit:.1f}°F - {category}")

Bài Tập 27: Đếm Theo Khoảng (Count by Range)

Đề bài: Nhập n số dương. Đếm có bao nhiêu số trong 0-10, 11-20, và >20.

Problem: Enter n positive numbers. Count how many in 0-10, 11-20, and >20.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) range1 = 0 range2 = 0 range3 = 0 for i in range(n): number = int(input("Enter number: ")) if number <= 10: range1 += 1 elif number <= 20: range2 += 1 else: range3 += 1 print(f"0-10: {range1}") print(f"11-20: {range2}") print(f">20: {range3}")

Bài Tập 28: Kim Tự Tháp Đảo Ngược (Inverted Pyramid)

Đề bài: Nhập n. In kim tự tháp đảo ngược bằng sao.

Problem: Enter n. Print inverted pyramid with stars.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(n, 0, -1): for j in range(i): print("*", end=" ") print()

Bài Tập 29: Xác Thực Số Dương (Validate Positive)

Đề bài: Nhập n số. Nếu số âm, yêu cầu nhập lại cho đến khi dương hoặc 0. Cuối cùng in tổng.

Problem: Enter n numbers. If negative, ask to re-enter until positive or 0. Finally print sum.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) total = 0 for i in range(n): number = int(input(f"Number {i+1}: ")) while number < 0: number = int(input("Invalid! Try again: ")) total += number print(f"Sum: {total}")

Bài Tập 30: Hình Thoi Đơn Giản (Simple Diamond)

Đề bài: Nhập n (số lẻ). In hình thoi bằng sao: nửa trên tăng, nửa dưới giảm.

Problem: Enter n (odd). Print diamond with stars: upper half increases, lower half decreases.

Solution (Đáp Án)

python
n = int(input("Enter n (odd): ")) mid = (n + 1) // 2 # Upper half for i in range(1, mid + 1): for j in range(2 * i - 1): print("*", end=" ") print() # Lower half for i in range(mid - 1, 0, -1): for j in range(2 * i - 1): print("*", end=" ") print()

Tier 4: Complex (Phức Tạp) - Exercises 31-40

Cấp độ: Phức tạp - Nhiều cấp độ lồng nhau, thuật toán

Bài Tập 31: Kiểm Tra Số Nguyên Tố (Prime Number Checker)

Đề bài: Nhập n số nguyên dương. Với mỗi số, kiểm tra có phải số nguyên tố không.

Problem: Enter n positive integers. For each, check if it's prime.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) if number <= 1: is_prime = False else: is_prime = True for j in range(2, int(number ** 0.5) + 1): if number % j == 0: is_prime = False break print("Prime" if is_prime else "Not Prime")

Bài Tập 32: Tìm Ước Số (Find Divisors)

Đề bài: Nhập n số. Với mỗi số, tìm và in tất cả ước số.

Problem: Enter n numbers. For each, find and print all divisors.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) print(f"Divisors of {number}:", end=" ") for j in range(1, number + 1): if number % j == 0: print(j, end=" ") print()

Bài Tập 33: Tính GCD (Thuật Toán Euclid) (GCD Calculator (Euclidean Algorithm))

Đề bài: Nhập n cặp số. Với mỗi cặp, tính GCD (Ước Chung Lớn Nhất).

Problem: Enter n pairs of numbers. For each pair, calculate GCD (Greatest Common Divisor).

Solution (Đáp Án)

python
n = int(input("Enter pairs: ")) for i in range(n): a = int(input("First number: ")) b = int(input("Second number: ")) while b != 0: temp = b b = a % b a = temp print(f"GCD: {a}")

Bài Tập 34: Dãy Fibonacci (Fibonacci Sequence)

Đề bài: Nhập n test case. Với mỗi test, nhập k và in k số Fibonacci đầu tiên.

Problem: Enter n test cases. For each, enter k and print first k Fibonacci numbers.

Solution (Đáp Án)

python
n = int(input("Enter tests: ")) for i in range(n): k = int(input(f"Test {i+1}, k: ")) if k >= 1: a, b = 0, 1 print(a, end=" ") if k >= 2: print(b, end=" ") for j in range(2, k): c = a + b print(c, end=" ") a, b = b, c print()

Bài Tập 35: Năm Nhuận (Leap Year)

Đề bài: Nhập n năm. Kiểm tra mỗi năm có phải năm nhuận không.

Problem: Enter n years. Check if each is a leap year.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): year = int(input("Enter year: ")) if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0): print("Leap") else: print("Not Leap")

Bài Tập 36: Tam Giác Floyd (Floyd's Triangle)

Đề bài: Nhập n dòng. In tam giác Floyd (số tự nhiên liên tiếp).

Problem: Enter n rows. Print Floyd's Triangle (consecutive natural numbers).

Solution (Đáp Án)

python
n = int(input("Enter n: ")) num = 1 for i in range(1, n + 1): for j in range(i): print(num, end=" ") num += 1 print()

Bài Tập 37: Tam Giác Pascal (Pascal's Triangle)

Đề bài: Nhập n dòng. In tam giác Pascal.

Problem: Enter n rows. Print Pascal's Triangle.

Solution (Đáp Án)

python
n = int(input("Enter n: ")) for i in range(n): num = 1 for j in range(i + 1): print(num, end=" ") num = num * (i - j) // (j + 1) print()

Bài Tập 38: Số Hoàn Hảo (Perfect Number)

Đề bài: Nhập n số. Kiểm tra mỗi số có phải số hoàn hảo không (tổng ước bằng chính nó).

Problem: Enter n numbers. Check if each is perfect (sum of divisors equals itself).

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) sum_divisors = 0 for j in range(1, number): if number % j == 0: sum_divisors += j if sum_divisors == number: print("Perfect") else: print("Not Perfect")

Bài Tập 39: Giả Thuyết Collatz (Collatz Conjecture)

Đề bài: Nhập n số. Với mỗi số, áp dụng quy tắc Collatz (chẵn chia 2, lẻ nhân 3 cộng 1) cho đến khi về 1. In số bước.

Problem: Enter n numbers. For each, apply Collatz rule (even divide by 2, odd multiply by 3 add 1) until reaching 1. Print steps.

Solution (Đáp Án)

python
n = int(input("Enter count: ")) for i in range(n): number = int(input("Enter number: ")) steps = 0 while number != 1: if number % 2 == 0: number = number // 2 else: number = number * 3 + 1 steps += 1 print(f"Steps: {steps}")

Bài Tập 40: Số Armstrong (Armstrong Number)

Đề bài: Nhập số n. Tìm và in tất cả số Armstrong từ 1 đến n. (Tổng các chữ số mũ k = chính nó, k là số chữ số).

Problem: Enter n. Find and print all Armstrong numbers from 1 to n. (Sum of digits^k equals itself, k is digit count).

Solution (Đáp Án)

python
n = int(input("Enter n: ")) print("Armstrong:", end=" ") first = True for num in range(1, n + 1): k = len(str(num)) sum_powers = 0 temp = num while temp > 0: digit = temp % 10 sum_powers += digit ** k temp //= 10 if sum_powers == num: if not first: print(",", end=" ") print(num, end="") first = False print()

Conclusion (Kết Luận)

Chúc mừng! Bạn đã hoàn thành 40 bài tập về vòng lặp và điều kiện. Những kỹ năng này là nền tảng quan trọng cho lập trình Python.

Bước tiếp theo: Học về hàm (Functions) và cấu trúc dữ liệu (Data Structures).