VÒNG LẶP - FOR, WHILE TRONG PYTHON¶
I. Định nghĩa và đặc điểm¶
1. Vòng lặp là gì?¶
Vòng lặp cho phép thực hiện một khối lệnh nhiều lần cho đến khi thỏa mãn điều kiện dừng.
# Ví dụ đơn giản
for i in range(5):
print(f"Số thứ {i+1}: {i}")
2. Đặc điểm của vòng lặp¶
- Thực hiện lặp lại khối lệnh
- Có điều kiện dừng
- Có thể lồng nhau
- Có thể sử dụng break, continue
II. Vòng lặp FOR¶
1. Cú pháp cơ bản¶
# Cú pháp
for bien in day_du_lieu:
# Khối lệnh thực hiện
pass
# Ví dụ với range()
for i in range(5):
print(f"Lần lặp thứ {i+1}")
2. Sử dụng range()¶
# range(stop) - từ 0 đến stop-1
for i in range(5):
print(i) # 0, 1, 2, 3, 4
# range(start, stop) - từ start đến stop-1
for i in range(2, 6):
print(i) # 2, 3, 4, 5
# range(start, stop, step) - với bước nhảy
for i in range(0, 10, 2):
print(i) # 0, 2, 4, 6, 8
3. Duyệt list, tuple, string¶
# Duyệt list
danh_sach = ["An", "Bình", "Cường"]
for ten in danh_sach:
print(f"Xin chào {ten}!")
# Duyệt tuple
diem = (8.5, 7.8, 9.2)
for d in diem:
print(f"Điểm: {d}")
# Duyệt string
chuoi = "Python"
for ky_tu in chuoi:
print(ky_tu)
4. Sử dụng enumerate()¶
# Duyệt với chỉ số
danh_sach = ["Toán", "Lý", "Hóa"]
for i, mon in enumerate(danh_sach):
print(f"{i+1}. {mon}")
# Bắt đầu từ số khác
for i, mon in enumerate(danh_sach, 1):
print(f"{i}. {mon}")
III. Vòng lặp WHILE¶
1. Cú pháp cơ bản¶
# Cú pháp
while dieu_kien:
# Khối lệnh thực hiện
pass
# Ví dụ
i = 1
while i <= 5:
print(f"Số: {i}")
i += 1
2. Vòng lặp vô hạn và điều kiện dừng¶
# Vòng lặp vô hạn
while True:
print("Vòng lặp vô hạn")
# Cần có break để thoát
# Ví dụ với điều kiện dừng
so = 1
while so <= 10:
print(so)
so += 1
3. Sử dụng break và continue¶
# Sử dụng break
for i in range(10):
if i == 5:
break # Thoát vòng lặp
print(i)
# Sử dụng continue
for i in range(10):
if i % 2 == 0:
continue # Bỏ qua, tiếp tục vòng lặp
print(i) # Chỉ in số lẻ
IV. Các hàm hữu ích với vòng lặp¶
1. Hàm range()¶
# Tạo dãy số từ 0 đến 4
for i in range(5):
print(i)
# Tạo dãy số từ 1 đến 10
for i in range(1, 11):
print(i)
# Tạo dãy số chẵn từ 0 đến 10
for i in range(0, 11, 2):
print(i)
# Tạo dãy số giảm dần
for i in range(10, 0, -1):
print(i)
2. Hàm enumerate()¶
# Duyệt với chỉ số
mon_hoc = ["Toán", "Lý", "Hóa", "Sinh"]
for vi_tri, mon in enumerate(mon_hoc):
print(f"Vị trí {vi_tri}: {mon}")
# Bắt đầu từ 1
for stt, mon in enumerate(mon_hoc, 1):
print(f"STT {stt}: {mon}")
V. Vòng lặp lồng nhau¶
1. For lồng nhau¶
# In bảng cửu chương
for i in range(1, 10):
print(f"Bảng cửu chương {i}:")
for j in range(1, 11):
print(f"{i} x {j} = {i*j}")
print()
2. While lồng nhau¶
# In hình tam giác
i = 1
while i <= 5:
j = 1
while j <= i:
print("*", end="")
j += 1
print()
i += 1
3. For và While kết hợp¶
# Tìm số nguyên tố
for so in range(2, 20):
la_so_nguyen_to = True
i = 2
while i < so:
if so % i == 0:
la_so_nguyen_to = False
break
i += 1
if la_so_nguyen_to:
print(f"{so} là số nguyên tố")
VI. Ví dụ minh họa¶
Ví dụ 1: Tính tổng và trung bình¶
# Nhập danh sách điểm
diem = []
n = int(input("Nhập số môn học: "))
for i in range(n):
d = float(input(f"Nhập điểm môn {i+1}: "))
diem.append(d)
# Tính tổng
tong = 0
for d in diem:
tong += d
# Tính trung bình
trung_binh = tong / len(diem)
print(f"Tổng điểm: {tong}")
print(f"Điểm trung bình: {trung_binh:.2f}")
Ví dụ 2: Tìm số lớn nhất và nhỏ nhất¶
# Nhập danh sách số
so = []
n = int(input("Nhập số lượng phần tử: "))
for i in range(n):
x = int(input(f"Nhập số thứ {i+1}: "))
so.append(x)
# Tìm số lớn nhất và nhỏ nhất
lon_nhat = so[0]
nho_nhat = so[0]
for x in so:
if x > lon_nhat:
lon_nhat = x
if x < nho_nhat:
nho_nhat = x
print(f"Số lớn nhất: {lon_nhat}")
print(f"Số nhỏ nhất: {nho_nhat}")
Ví dụ 3: Kiểm tra số nguyên tố¶
# Kiểm tra số nguyên tố
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_so_nguyen_to = True
i = 2
while i <= so // 2:
if so % i == 0:
la_so_nguyen_to = False
break
i += 1
if la_so_nguyen_to:
print(f"{so} là số nguyên tố")
else:
print(f"{so} không phải số nguyên tố")
Ví dụ 4: In bảng cửu chương¶
# In bảng cửu chương
print("BẢNG CỬU CHƯƠNG")
print("=" * 50)
for i in range(1, 10):
print(f"Bảng cửu chương {i}:")
print("-" * 20)
for j in range(1, 11):
print(f"{i:2d} x {j:2d} = {i*j:2d}")
print()
VII. Bài tập thực hành tại lớp¶
Bài 1: In dãy số từ 1 đến 10¶
Đề bài: Viết chương trình in các số từ 1 đến 10.
💡 Phân tích đề
Các bước thực hiện:
- Sử dụng vòng lặp for với range()
- range(1, 11) để lặp từ 1 đến 10
- In từng số ra màn hình
- Mỗi số trên một dòng
Input/Output mẫu:
Vòng lặp | Output |
---|---|
for i in range(1, 11) |
1 |
2 |
|
... |
|
10 |
💡 Gợi ý code
# In các số từ 1 đến 10
for i in range(1, 11):
print(i)
Bài 2: Tính tổng từ 1 đến n¶
Đề bài: Viết chương trình tính tổng các số từ 1 đến n.
💡 Phân tích đề
Các bước thực hiện:
- Nhập số n từ bàn phím
- Khởi tạo biến tong = 0
- Dùng vòng for từ 1 đến n
- Cộng dồn từng số vào biến tong
- In kết quả cuối cùng
Input/Output mẫu:
Input n | Tính toán | Output |
---|---|---|
5 |
1+2+3+4+5 |
Tổng từ 1 đến 5: 15 |
10 |
1+2+...+10 |
Tổng từ 1 đến 10: 55 |
💡 Gợi ý code
# Nhập số n
n = int(input("Nhập n: "))
# Tính tổng từ 1 đến n
tong = 0
for i in range(1, n+1):
tong += i
print(f"Tổng từ 1 đến {n}: {tong}")
Bài 3: In bảng cửu chương¶
Đề bài: Viết chương trình in bảng cửu chương của một số.
💡 Phân tích đề
Các bước thực hiện:
- Nhập số cần in bảng cửu chương
- Dùng vòng for từ 1 đến 10
- Tính tích của số đó với từng số từ 1-10
- In kết quả theo định dạng: "a x b = c"
Input/Output mẫu:
Input | Phép tính | Output |
---|---|---|
7 |
7 x 1 |
7 x 1 = 7 |
7 x 2 |
7 x 2 = 14 |
|
... |
... |
|
7 x 10 |
7 x 10 = 70 |
💡 Gợi ý code
# Nhập số cần in bảng cửu chương
n = int(input("Nhập số cần in bảng cửu chương: "))
# In bảng cửu chương
for i in range(1, 11):
print(f"{n} x {i} = {n*i}")
VIII. Bài tập về nhà¶
Bài 1: Tìm số nguyên tố¶
Đề bài: Viết chương trình tìm tất cả số nguyên tố từ 1 đến n.
💡 Phân tích đề
Các bước thực hiện:
- Nhập số n từ bàn phím
- Duyệt từng số từ 2 đến n
- Với mỗi số, kiểm tra có phải số nguyên tố không
- Số nguyên tố chỉ chia hết cho 1 và chính nó
- Kiểm tra chia hết từ 2 đến căn bậc 2 của số đó
- In các số nguyên tố tìm được
Input/Output mẫu:
Input n | Số nguyên tố | Output |
---|---|---|
10 |
2, 3, 5, 7 |
Số nguyên tố từ 1 đến 10: [2, 3, 5, 7] |
Bài 2: Tính giai thừa¶
Đề bài: Viết chương trình tính giai thừa của một số.
💡 Phân tích đề
Các bước thực hiện:
- Nhập số n từ bàn phím
- Kiểm tra n >= 0 (giai thừa chỉ định nghĩa cho số không âm)
- Khởi tạo kết quả = 1
- Dùng vòng lặp từ 1 đến n
- Nhân dồn từng số vào kết quả
- In kết quả giai thừa
Input/Output mẫu:
Input n | Tính toán | Output |
---|---|---|
5 |
1×2×3×4×5 |
5! = 120 |
0 |
Quy ước |
0! = 1 |
Bài 3: In hình tam giác¶
Đề bài: Viết chương trình in hình tam giác bằng dấu *.
💡 Phân tích đề
Các bước thực hiện:
- Nhập chiều cao tam giác n
- Sử dụng vòng lặp lồng nhau
- Vòng ngoài: từ 1 đến n (số dòng)
- Vòng trong: in số dấu * tương ứng với số dòng
- Có thể in tam giác vuông hoặc tam giác cân
Input/Output mẫu:
Input n | Hình tam giác |
---|---|
4 |
* |
** |
|
*** |
|
**** |
Bài 4: Tìm ước chung lớn nhất¶
Đề bài: Viết chương trình tìm ước chung lớn nhất của hai số.
💡 Phân tích đề
Các bước thực hiện:
- Nhập hai số a và b từ bàn phím
- Sử dụng thuật toán Euclid:
- Lặp cho đến khi b = 0
- temp = a % b
- a = b, b = temp
- Hoặc dùng cách duyệt ngược từ min(a,b) về 1
- Tìm số lớn nhất chia hết cho cả a và b
- In kết quả ƯCLN
Input/Output mẫu:
Input a | Input b | ƯCLN | Output |
---|---|---|---|
48 |
18 |
6 |
ƯCLN(48, 18) = 6 |
IX. Ghi chú quan trọng¶
1. Cú pháp cơ bản¶
for
dùng cho dãy dữ liệu có sẵnwhile
dùng khi không biết số lần lặp- Sử dụng
break
để thoát vòng lặp - Sử dụng
continue
để bỏ qua vòng lặp hiện tại
2. Lưu ý khi sử dụng¶
- Tránh vòng lặp vô hạn với while
- Sử dụng range() hiệu quả
- Kiểm tra điều kiện dừng cẩn thận
3. Các lỗi thường gặp¶
- Quên tăng biến đếm trong while
- Vòng lặp vô hạn
- Sai điều kiện dừng