🔁 6.3 Lặp với list, string
📖 Giới thiệu
Vòng lặp for không chỉ dùng với range(), mà còn có thể duyệt trực tiếp qua list và string. Đây là cách rất tự nhiên và Pythonic để xử lý dữ liệu.
Mục tiêu bài học:
- Duyệt list mà không cần chỉ số
- Xử lý từng ký tự trong string
- Kết hợp vòng lặp với list và string
🔧 Cú pháp
1. 📋 Lặp với list:
python
# Duyệt trực tiếp
fruits = ["táo", "cam", "chuối"]
for fruit in fruits:
print(f"Tôi thích {fruit}")
# Duyệt với chỉ số (nếu cần)
for i in range(len(fruits)):
print(f"{i}: {fruits[i]}")2. 🔤 Lặp với string:
python
# Duyệt từng ký tự
name = "Python"
for char in name:
print(f"Ký tự: {char}")
# Duyệt với chỉ số
for i in range(len(name)):
print(f"Vị trí {i}: {name[i]}")3. 🎯 Kết hợp enumerate():
python
# Có cả phần tử và chỉ số
fruits = ["táo", "cam", "chuối"]
for i, fruit in enumerate(fruits):
print(f"{i}: {fruit}")🔬 Phân tích & Giải thích chi tiết
1. 🔍 So sánh các cách duyệt list
python
# Danh sách mẫu
mon_hoc = ["Toán", "Văn", "Anh", "Lý", "Hóa"]
# Cách 1: Duyệt trực tiếp (Pythonic)
print("Cách 1 - Duyệt trực tiếp:")
for mon in mon_hoc:
print(f"Môn: {mon}")
# Cách 2: Duyệt với chỉ số
print("\nCách 2 - Duyệt với chỉ số:")
for i in range(len(mon_hoc)):
print(f"Môn {i+1}: {mon_hoc[i]}")
# Cách 3: Duyệt với enumerate
print("\nCách 3 - Enumerate:")
for i, mon in enumerate(mon_hoc):
print(f"Môn {i+1}: {mon}")2. 🔤 Xử lý string với vòng for
python
# Đếm ký tự
text = "Hello Python"
so_chu_cai = 0
so_khoang_trang = 0
for char in text:
if char.isalpha(): # Là chữ cái
so_chu_cai += 1
elif char == " ": # Là khoảng trắng
so_khoang_trang += 1
print(f"Chữ cái: {so_chu_cai}")
print(f"Khoảng trắng: {so_khoang_trang}")
# Tìm ký tự
tim_ky_tu = "o"
vi_tri = []
for i, char in enumerate(text):
if char == tim_ky_tu:
vi_tri.append(i)
print(f"Ký tự '{tim_ky_tu}' ở vị trí: {vi_tri}")3. 🧮 Xử lý list số
python
# Danh sách điểm
diem_so = [8, 7, 9, 6, 8, 10, 7]
# Tính điểm trung bình
tong_diem = 0
for diem in diem_so:
tong_diem += diem
diem_tb = tong_diem / len(diem_so)
print(f"Điểm trung bình: {diem_tb:.1f}")
# Đếm loại điểm
gioi = 0
kha = 0
trung_binh = 0
for diem in diem_so:
if diem >= 8:
gioi += 1
elif diem >= 6:
kha += 1
else:
trung_binh += 1
print(f"Giỏi: {gioi}, Khá: {kha}, TB: {trung_binh}")💻 Ví dụ minh họa
Ví dụ 1: In danh sách trái cây
python
# Danh sách trái cây
trai_cay = ["táo", "chuối", "cam", "xoài"]
print("Các loại trái cây:")
for trai in trai_cay:
print(f"- {trai}")Ví dụ 2: Đếm ký tự trong tên
python
# Đếm ký tự trong tên
ten = "An"
print(f"Tên: {ten}")
print("Các ký tự:")
for chu in ten:
print(f"+ {chu}")
# Kết quả thống kê
print(f"\n📊 THỐNG KÊ:")
print(f"Tổng ký tự: {len(cau)}")
print(f"Chữ cái: {so_chu_cai}")
print(f"Chữ số: {so_chu_so}")
print(f"Khoảng trắng: {so_khoang_trang}")
print(f"Ký tự đặc biệt: {so_dac_biet}")
# Đếm nguyên âm
nguyen_am = "aeiouAEIOU"
so_nguyen_am = 0
for char in cau:
if char in nguyen_am:
so_nguyen_am += 1
print(f"Nguyên âm: {so_nguyen_am}")Ví dụ 3: Máy tính điểm lớp
python
# may_tinh_diem_lop.py
print("📚 MÁY TÍNH ĐIỂM LỚP")
print("=" * 25)
# Danh sách học sinh và điểm
hoc_sinh = ["An", "Bình", "Chi", "Dũng", "Emy"]
diem_toan = [8, 7, 9, 6, 8]
diem_van = [7, 8, 8, 7, 9]
print("📋 BẢNG ĐIỂM LỚP:")
print("-" * 30)
print(f"{'Tên':8} {'Toán':>6} {'Văn':>6} {'TB':>6}")
print("-" * 30)
# Tính và hiển thị điểm từng học sinh
tong_diem_lop = 0
so_hoc_sinh = len(hoc_sinh)
for i in range(so_hoc_sinh):
ten = hoc_sinh[i]
toan = diem_toan[i]
van = diem_van[i]
### Ví dụ 3: Tính tổng các số
```python
# Tính tổng từ 1 đến 5
so_list = [1, 2, 3, 4, 5]
tong = 0
for so in so_list:
tong = tong + so
print(f"Tổng = {tong}")🏋️ Thực hành
Bài tập 1: In từng chữ cái
python
# In từng chữ cái trong tên
ten = "Minh"
for chu in ten:
print(chu)Bài tập 2: Đếm số lẻ
python
# Đếm số lẻ trong list
so_list = [1, 2, 3, 4, 5]
dem = 0
for so in so_list:
if so % 2 == 1: # Số lẻ
dem = dem + 1
print(f"Có {dem} số lẻ")Bài tập 3: Tìm từ khóa
python
# Tìm từ "Python" trong list
mon_hoc = ["Toán", "Python", "Văn"]
for mon in mon_hoc:
if mon == "Python":
print("Tìm thấy Python!")📋 Tóm tắt
So sánh các cách duyệt:
| Cách | Cú pháp | Khi nào dùng |
|---|---|---|
| Duyệt trực tiếp | for item in list | Chỉ cần giá trị |
| Duyệt với chỉ số | for i in range(len(list)) | Cần vị trí |
| Enumerate | for i, item in enumerate(list) | Cần cả hai |
Duyệt string:
python
text = "Hello"
# Duyệt ký tự
for char in text:
print(char)
# Duyệt với vị trí
for i, char in enumerate(text):
print(f"{i}: {char}")Mẹo hữu ích:
python
# ✅ Kiểm tra phần tử có trong list
if "táo" in fruits:
print("Có táo trong danh sách")
# ✅ Tìm vị trí phần tử
try:
vi_tri = fruits.index("táo")
print(f"Táo ở vị trí {vi_tri}")
except ValueError:
print("Không tìm thấy táo")
# ✅ Đếm phần tử
so_tao = fruits.count("táo")
print(f"Có {so_tao} quả táo")Chuẩn bị cho bài tiếp theo:
Bài tiếp theo sẽ học về 📝 Bài tập cơ bản - luyện tập với nhiều bài toán thực tế!
💡 Mẹo: Duyệt trực tiếp (for item in list) luôn dễ đọc hơn duyệt với chỉ số!
🔁 Thực hành: Thử duyệt các loại dữ liệu khác nhau để làm quen!