📝 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ạng | Kỹ năng | Ví dụ |
|---|---|---|
| Số học | Tính toán, điều kiện | Tổng chẵn, ước số, nguyên tố |
| List | Duyệt, tìm kiếm, thống kê | Điểm số, tìm max/min |
| String | Xử lý văn bản, đếm | Phân tích mật khẩu, đếm từ |
| Vẽ hình | Vòng lặp lồng nhau | Tam 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!