Vòng lặp trong Python: for, while và cách sử dụng
Hãy tưởng tượng bạn cần in ra 100 dòng "Xin chào" — viết 100 lệnh print? Không ai làm vậy. Đó là lý do vòng lặp tồn tại.
Vòng lặp là gì? Tại sao cần?
# Không có vòng lặp — lặp thủ công, rất tệ
print(1)
print(2)
# ... 98 dòng nữa ...
print(100)
# Có vòng lặp — gọn, rõ, đúng cách
for i in range(1, 101):
print(i)
Vòng lặp cho phép thực hiện cùng một thao tác nhiều lần mà không cần viết code lặp lại. Đây là khái niệm nền tảng mà mọi ngôn ngữ lập trình đều có.
Vòng lặp for trong Python
Cú pháp cơ bản
for biến in iterable:
# Code thực hiện mỗi lần lặp
Dùng với range()
# range(stop) — từ 0 đến stop-1
for i in range(5):
print(i)
# Output: 0 1 2 3 4
# range(start, stop)
for i in range(1, 6):
print(i)
# Output: 1 2 3 4 5
# range(start, stop, step) — bước nhảy
for i in range(0, 11, 2): # số chẵn từ 0 đến 10
print(i, end=" ")
# Output: 0 2 4 6 8 10
Lặp qua list
ngon_ngu = ["Python", "JavaScript", "SQL", "Go"]
for nn in ngon_ngu:
print(f"Tôi biết {nn}")
enumerate() — lặp kèm chỉ số
Khi cần cả vị trí lẫn giá trị, dùng enumerate() thay vì tự đếm thủ công:
mon_hoc = ["Toán", "Lý", "Hóa", "Python"]
for stt, mon in enumerate(mon_hoc, start=1):
print(f"{stt}. {mon}")
# Output:
# 1. Toán
# 2. Lý
# 3. Hóa
# 4. Python
Vòng lặp while trong Python
while điều_kiện:
# Thực hiện khi điều kiện True
# Ví dụ cơ bản
dem = 1
while dem <= 5:
print(f"Lần {dem}")
dem += 1 # Quan trọng: thiếu dòng này → vòng lặp vô hạn!
Ví dụ thực tế: hệ thống đăng nhập
mat_khau = "vietcode2026"
so_lan = 0
while so_lan < 3:
nhap = input(f"Mật khẩu ({3-so_lan} lần còn): ")
if nhap == mat_khau:
print("Đăng nhập thành công!")
break
so_lan += 1
print("Sai mật khẩu!")
else:
print("Tài khoản bị khóa sau 3 lần sai!")
for vs while — dùng cái nào?
| for | while | |
|---|---|---|
| Dùng khi | Biết trước số lần lặp | Không biết trước số lần |
| Ví dụ | Duyệt list, range() | Chờ input người dùng, game loop |
| Rủi ro | Ít khi bị vô hạn | Dễ vô hạn nếu quên cập nhật điều kiện |
break, continue, pass
# break — thoát vòng lặp ngay
for i in range(10):
if i == 5:
break # dừng ở 5
print(i, end=" ")
# Output: 0 1 2 3 4
# continue — bỏ qua lần lặp hiện tại
for i in range(10):
if i % 2 == 0:
continue # bỏ qua số chẵn
print(i, end=" ")
# Output: 1 3 5 7 9
# pass — giữ chỗ, không làm gì
for i in range(5):
if i == 3:
pass # TODO: xử lý sau
print(i)
Vòng lặp lồng nhau
# Bảng cửu chương 2 và 3
for i in range(2, 4):
print(f"\n=== Bảng {i} ===")
for j in range(1, 11):
print(f"{i} x {j:2} = {i*j:2}")
List Comprehension — viết vòng lặp ngắn gọn hơn
Đây là cú pháp đặc trưng của Python, giúp tạo list từ vòng lặp trong một dòng:
# Cách thông thường
binh_phuong = []
for i in range(1, 6):
binh_phuong.append(i ** 2)
# List comprehension — Pythonic hơn
binh_phuong = [i ** 2 for i in range(1, 6)]
# [1, 4, 9, 16, 25]
# Với điều kiện lọc
so_chan = [i for i in range(20) if i % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Bài tập thực hành
# FizzBuzz — bài tập phỏng vấn kinh điển
for i in range(1, 101):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
# Tính tổng các số từ 1 đến 100
tong = sum(range(1, 101))
print(f"Tổng = {tong}") # 5050
Kết luận
Vòng lặp là công cụ không thể thiếu trong lập trình. Nắm chắc for, while, và break/continue là đủ để giải quyết hầu hết bài toán lặp trong Python.