Skip to content

📝 6.4 Bài tập cơ bản

📖 Giới thiệu

Sau khi học về vòng lặp for, đây là lúc thực hành với các bài tập từ cơ bản đến nâng cao. Chúng ta sẽ áp dụng kiến thức về range(), duyệt list và string vào các bài toán thực tế.

Mục tiêu bài học:

  • Áp dụng vòng for vào bài toán thực tế
  • Kết hợp điều kiện với vòng lặp
  • Xử lý dữ liệu list và string
  • Tạo output đẹp mắt

🔢 Bài tập số học

Bài 1: Tính tổng các số chẵn

python
# tinh_tong_so_chan.py
print("🔢 TÍNH TỔNG SỐ CHẴN")
print("=" * 25)

n = int(input("Tính tổng số chẵn từ 1 đến: "))

tong_chan = 0
danh_sach_chan = []

for so in range(1, n + 1):
    if so % 2 == 0:  # Số chẵn
        tong_chan += so
        danh_sach_chan.append(so)

print(f"\n📊 KẾT QUẢ:")
print(f"Các số chẵn: {danh_sach_chan}")
print(f"Tổng số chẵn: {tong_chan}")
print(f"Số lượng: {len(danh_sach_chan)}")

# Công thức kiểm tra: 2 + 4 + 6 + ... + 2k = k(k+1)
k = n // 2
tong_cong_thuc = k * (k + 1)
print(f"Kiểm tra công thức: {tong_cong_thuc}")

Bài 2: Tìm ước số

python
# tim_uoc_so.py
print("🔍 TÌM ƯỚC SỐ")
print("=" * 15)

so = int(input("Nhập số cần tìm ước: "))

uoc_so = []
tong_uoc = 0

print(f"\n🔍 Tìm ước của {so}:")

for i in range(1, so + 1):
    if so % i == 0:  # i là ước của so
        uoc_so.append(i)
        tong_uoc += i
        print(f"{so} ÷ {i} = {so // i} (dư {so % i})")

print(f"\n📊 KẾT QUẢ:")
print(f"Các ước số: {uoc_so}")
print(f"Số lượng ước: {len(uoc_so)}")
print(f"Tổng các ước: {tong_uoc}")

# Kiểm tra số hoàn hảo
if tong_uoc - so == so:  # Bỏ chính nó
    print(f"🌟 {so} là số hoàn hảo!")

Bài 3: Kiểm tra số nguyên tố

python
# kiem_tra_nguyen_to.py
print("🔍 KIỂM TRA SỐ NGUYÊN TỐ")
print("=" * 30)

so = int(input("Nhập số cần kiểm tra: "))

if so < 2:
    print(f"{so} không phải số nguyên tố")
else:
    la_nguyen_to = True
    
    print(f"\n🔍 Kiểm tra {so}:")
    for i in range(2, so):
        if so % i == 0:
            print(f"  {so} chia hết cho {i} → Không phải nguyên tố")
            la_nguyen_to = False
            break
        else:
            print(f"  {so} không chia hết cho {i}")
    
    if la_nguyen_to:
        print(f"🌟 {so} là số nguyên tố!")
    else:
        print(f"❌ {so} không phải số nguyên tố")

# Bonus: Tìm các số nguyên tố từ 1 đến n
print(f"\n🔢 CÁC SỐ NGUYÊN TỐ TỪ 1 ĐẾN {so}:")
nguyen_to_list = []

for num in range(2, so + 1):
    la_nt = True
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            la_nt = False
            break
    if la_nt:
        nguyen_to_list.append(num)

print(f"Danh sách: {nguyen_to_list}")
print(f"Có {len(nguyen_to_list)} số nguyên tố")

📋 Bài tập xử lý list

Bài 4: Thống kê điểm số

python
# thong_ke_diem.py
print("📊 THỐNG KÊ ĐIỂM SỐ")
print("=" * 20)

# Nhập điểm
diem_list = []
so_mon = int(input("Số môn học: "))

for i in range(so_mon):
    diem = float(input(f"Điểm môn {i + 1}: "))
    diem_list.append(diem)

print(f"\n📋 DANH SÁCH ĐIỂM: {diem_list}")

# Tính các thống kê
tong_diem = 0
diem_max = diem_list[0]
diem_min = diem_list[0]

for diem in diem_list:
    tong_diem += diem
    if diem > diem_max:
        diem_max = diem
    if diem < diem_min:
        diem_min = diem

diem_tb = tong_diem / len(diem_list)

# Phân loại học lực
xuat_sac = 0
gioi = 0
kha = 0
trung_binh = 0
yeu = 0

for diem in diem_list:
    if diem >= 9:
        xuat_sac += 1
    elif diem >= 8:
        gioi += 1
    elif diem >= 6.5:
        kha += 1
    elif diem >= 5:
        trung_binh += 1
    else:
        yeu += 1

print(f"\n📊 THỐNG KÊ:")
print(f"Điểm trung bình: {diem_tb:.2f}")
print(f"Điểm cao nhất: {diem_max}")
print(f"Điểm thấp nhất: {diem_min}")
print(f"\n📈 PHÂN LOẠI:")
print(f"Xuất sắc (9-10): {xuat_sac}")
print(f"Giỏi (8-8.9): {gioi}")
print(f"Khá (6.5-7.9): {kha}")
print(f"Trung bình (5-6.4): {trung_binh}")
print(f"Yếu (<5): {yeu}")

Bài 5: Tìm kiếm trong list

python
# tim_kiem_list.py
print("🔍 TÌM KIẾM TRONG DANH SÁCH")
print("=" * 35)

# Danh sách mẫu
hoa_qua = ["táo", "cam", "chuối", "xoài", "nho", "táo", "dưa hấu"]
print(f"Danh sách: {hoa_qua}")

# Tìm kiếm
tim = input("\nNhập tên quả cần tìm: ").lower()

vi_tri_tim_thay = []
so_lan_xuat_hien = 0

for i, qua in enumerate(hoa_qua):
    if qua.lower() == tim:
        vi_tri_tim_thay.append(i)
        so_lan_xuat_hien += 1

if so_lan_xuat_hien > 0:
    print(f"\n✅ TÌM THẤY:")
    print(f"'{tim}' xuất hiện {so_lan_xuat_hien} lần")
    print(f"Ở các vị trí: {vi_tri_tim_thay}")
    
    for vi_tri in vi_tri_tim_thay:
        print(f"  Vị trí {vi_tri}: {hoa_qua[vi_tri]}")
else:
    print(f"\n❌ Không tìm thấy '{tim}'")

# Gợi ý tương tự
print(f"\n💡 GỢI Ý TƯƠNG TỰ:")
for qua in hoa_qua:
    if tim in qua.lower() or qua.lower() in tim:
        print(f"- {qua}")

🔤 Bài tập xử lý string

Bài 6: Phân tích mật khẩu

python
# phan_tich_mat_khau.py
print("🔐 PHÂN TÍCH ĐỘ MẠNH MẬT KHẨU")
print("=" * 35)

mat_khau = input("Nhập mật khẩu: ")

# Thống kê ký tự
chu_thuong = 0
chu_hoa = 0
chu_so = 0
ky_tu_dac_biet = 0

print(f"\n🔍 PHÂN TÍCH TỪNG KÝ TỰ:")

for i, char in enumerate(mat_khau):
    print(f"Vị trí {i:2}: '{char}'", end=" - ")
    
    if char.islower():
        chu_thuong += 1
        print("Chữ thường")
    elif char.isupper():
        chu_hoa += 1
        print("Chữ hoa")
    elif char.isdigit():
        chu_so += 1
        print("Chữ số")
    else:
        ky_tu_dac_biet += 1
        print("Ký tự đặc biệt")

# Đánh giá độ mạnh
do_dai = len(mat_khau)
diem = 0

print(f"\n📊 THỐNG KÊ:")
print(f"Độ dài: {do_dai}")
print(f"Chữ thường: {chu_thuong}")
print(f"Chữ hoa: {chu_hoa}")
print(f"Chữ số: {chu_so}")
print(f"Ký tự đặc biệt: {ky_tu_dac_biet}")

# Tính điểm
if do_dai >= 8:
    diem += 2
elif do_dai >= 6:
    diem += 1

if chu_thuong > 0:
    diem += 1
if chu_hoa > 0:
    diem += 1
if chu_so > 0:
    diem += 1
if ky_tu_dac_biet > 0:
    diem += 2

print(f"\n🏆 ĐÁNH GIÁ:")
print(f"Điểm: {diem}/8")

if diem >= 6:
    print("🟢 Mật khẩu MẠNH")
elif diem >= 4:
    print("🟡 Mật khẩu TRUNG BÌNH")
else:
    print("🔴 Mật khẩu YẾU")

Bài 7: Đếm từ và ký tự

python
# dem_tu_ky_tu.py
print("📝 ĐẾM TỪ VÀ KÝ TỰ")
print("=" * 20)

van_ban = input("Nhập văn bản: ")

# Thống kê cơ bản
so_ky_tu = len(van_ban)
so_ky_tu_khong_khoang_trang = 0
so_khoang_trang = 0

for char in van_ban:
    if char != " ":
        so_ky_tu_khong_khoang_trang += 1
    else:
        so_khoang_trang += 1

# Đếm từ
tu_list = van_ban.split()
so_tu = len(tu_list)

# Tìm từ dài nhất và ngắn nhất
if tu_list:
    tu_dai_nhat = tu_list[0]
    tu_ngan_nhat = tu_list[0]
    
    for tu in tu_list:
        if len(tu) > len(tu_dai_nhat):
            tu_dai_nhat = tu
        if len(tu) < len(tu_ngan_nhat):
            tu_ngan_nhat = tu

    # Đếm tần suất từ
    tan_suat = {}
    for tu in tu_list:
        tu_lower = tu.lower()
        if tu_lower in tan_suat:
            tan_suat[tu_lower] += 1
        else:
            tan_suat[tu_lower] = 1

    print(f"\n📊 THỐNG KÊ:")
    print(f"Tổng ký tự: {so_ky_tu}")
    print(f"Ký tự (không kể khoảng trắng): {so_ky_tu_khong_khoang_trang}")
    print(f"Khoảng trắng: {so_khoang_trang}")
    print(f"Số từ: {so_tu}")
    print(f"Từ dài nhất: '{tu_dai_nhat}' ({len(tu_dai_nhat)} ký tự)")
    print(f"Từ ngắn nhất: '{tu_ngan_nhat}' ({len(tu_ngan_nhat)} ký tự)")
    
    print(f"\n📈 TẦN SUẤT TỪ:")
    for tu, so_lan in tan_suat.items():
        print(f"'{tu}': {so_lan} lần")

🎨 Bài tập vẽ hình

Bài 8: Vẽ tam giác

python
# ve_tam_giac.py
print("🔺 VẼ CÁC LOẠI TAM GIÁC")
print("=" * 25)

h = int(input("Chiều cao tam giác: "))

# Tam giác vuông
print(f"\n🔺 TAM GIÁC VUÔNG:")
for i in range(1, h + 1):
    for j in range(i):
        print("*", end=" ")
    print()

# Tam giác vuông ngược
print(f"\n🔻 TAM GIÁC VUÔNG NGƯỢC:")
for i in range(h, 0, -1):
    for j in range(i):
        print("*", end=" ")
    print()

# Tam giác cân
print(f"\n🔺 TAM GIÁC CÂN:")
for i in range(1, h + 1):
    # Khoảng trắng
    for j in range(h - i):
        print(" ", end="")
    # Sao
    for j in range(2 * i - 1):
        print("*", end="")
    print()

# Tam giác số
print(f"\n🔢 TAM GIÁC SỐ:")
for i in range(1, h + 1):
    for j in range(1, i + 1):
        print(j, end=" ")
    print()

Bài 9: Bảng cửu chương đẹp

python
# bang_cuu_chuong_dep.py
print("✖️ BẢNG CỬU CHƯƠNG ĐẸP")
print("=" * 25)

print("╔" + "═" * 50 + "╗")
print("║" + " " * 15 + "BẢNG CỬU CHƯƠNG" + " " * 15 + "║")
print("╠" + "═" * 50 + "╣")

# In bảng từ 1 đến 9
for hang in range(1, 4):  # 3 hàng
    # In dòng phép tính
    for i in range(1, 11):  # 10 phép tính mỗi bảng
        dong = "║"
        for cot in range(3):  # 3 cột
            bang = (hang - 1) * 3 + cot + 1
            if bang <= 9:
                ket_qua = bang * i
                dong += f" {bang}x{i:2}={ket_qua:2}"
            else:
                dong += "      "
        dong += " ║"
        print(dong)
    
    if hang < 3:
        print("╠" + "═" * 50 + "╣")

print("╚" + "═" * 50 + "╝")

🏋️ Bài tập tổng hợp

Bài 10: Máy tính mini

python
# may_tinh_mini.py
print("🧮 MÁY TÍNH MINI")
print("=" * 20)

while True:
    print(f"\n📋 MENU:")
    print("1. Tính tổng dãy số")
    print("2. Tìm số nguyên tố")
    print("3. Thống kê chuỗi")
    print("4. Vẽ tam giác")
    print("0. Thoát")
    
    lua_chon = input("\nChọn chức năng (0-4): ")
    
    if lua_chon == "1":
        start = int(input("Từ số: "))
        end = int(input("Đến số: "))
        tong = 0
        for i in range(start, end + 1):
            tong += i
        print(f"Tổng từ {start} đến {end} = {tong}")
        
    elif lua_chon == "2":
        n = int(input("Kiểm tra nguyên tố đến: "))
        print("Các số nguyên tố:")
        for num in range(2, n + 1):
            la_nt = True
            for i in range(2, int(num ** 0.5) + 1):
                if num % i == 0:
                    la_nt = False
                    break
            if la_nt:
                print(num, end=" ")
        print()
        
    elif lua_chon == "3":
        text = input("Nhập chuỗi: ")
        print(f"Độ dài: {len(text)}")
        print(f"Số từ: {len(text.split())}")
        
    elif lua_chon == "4":
        h = int(input("Chiều cao: "))
        for i in range(1, h + 1):
            print("*" * i)
            
    elif lua_chon == "0":
        print("👋 Tạm biệt!")
        break
    else:
        print("❌ Lựa chọn không hợp lệ!")

📋 Tóm tắt bài tập

Các dạng bài tập đã thực hành:

DạngKỹ năngVí dụ
Số họcTính toán, điều kiệnTổng chẵn, ước số, nguyên tố
ListDuyệt, tìm kiếm, thống kêĐiểm số, tìm max/min
StringXử lý văn bản, đếmPhân tích mật khẩu, đếm từ
Vẽ hìnhVòng lặp lồng nhauTam giác, bảng cửu chương

Patterns thường gặp:

python
# Pattern 1: Tính tổng
tong = 0
for so in danh_sach:
    tong += so

# Pattern 2: Tìm max
max_value = danh_sach[0]
for so in danh_sach:
    if so > max_value:
        max_value = so

# Pattern 3: Đếm thỏa điều kiện
dem = 0
for item in danh_sach:
    if dieu_kien:
        dem += 1

# Pattern 4: Tạo list mới
ket_qua = []
for item in danh_sach:
    if dieu_kien:
        ket_qua.append(item)

Chuẩn bị cho chương tiếp theo:

Chương tiếp theo sẽ học về 🔂 Vòng lặp while - vòng lặp với điều kiện!


💡 Mẹo: Bắt đầu với bài đơn giản, sau đó tăng dần độ khó!

📝 Thực hành: Thử sửa đổi các bài tập để hiểu sâu hơn về vòng lặp!

🐍 Khóa học Python căn bản bằng tiếng Việt