# Vòng Lặp `for` Trong Python
Trong lập trình, vòng lặp giúp chúng ta thực hiện một đoạn mã nhiều lần. Trong Python, vòng lặp `for` cho phép chúng ta lặp qua một dãy các phần tử, ví dụ như danh sách hoặc chuỗi. Hãy cùng tìm hiểu về vòng lặp `for` nhé!!
## 1. Cú Pháp Vòng Lặp `for`
Cú pháp cơ bản của vòng lặp `for` trong Python như sau:
**Cú pháp:**
```python
for biến in dãy:
# Thực hiện đoạn mã này cho mỗi phần tử trong dãy
```
**Ví dụ:**
```python
for i in range(5):
print(i)
```
Trong ví dụ trên, `range(5)` tạo ra một dãy các số từ 0 đến 4, và `i` sẽ lần lượt nhận các giá trị này. Kết quả sẽ in ra:
```
0
1
2
3
4
```
### Cách Sử Dụng `range()` với Ba Tham Số
`range()` có thể nhận từ một đến ba tham số: `start`, `stop`, và `step`.
- **start**: Giá trị bắt đầu của dãy số (mặc định là 0).
- **stop**: Giá trị dừng của dãy số (không bao gồm giá trị này).
- **step**: Khoảng cách giữa các giá trị (mặc định là 1).
**Cú pháp:**
```python
range(start, stop, step)
```
**Lưu ý:** Cả 3 tham đố trên đều là số nguyên
**Ví dụ:**
```python
for i in range(2, 10, 2):
print(i)
```
Trong ví dụ này, `range(2, 10, 2)` tạo ra một dãy các số bắt đầu từ 2, nhỏ hơn 10 và tăng dần với bước nhảy là 2. Kết quả sẽ in ra:
```
2
4
6
8
```
**Ví dụ với giá trị giảm dần:**
```python
for i in range(10, 2, -2):
print(i)
```
Trong ví dụ này, `range(10, 2, -2)` tạo ra một dãy các số bắt đầu từ 10, lớn hơn 2 và giảm dần với bước nhảy là -2. Kết quả sẽ in ra:
```
10
8
6
4
```
## 2. Vòng Lặp Qua Danh Sách
Vòng lặp `for` rất hữu ích khi làm việc với danh sách.
**Ví dụ:**
```python
trai_cay = ["táo", "chuối", "cam"]
for qua in trai_cay:
print(qua)
```
Kết quả sẽ in ra:
```
táo
chuối
cam
```
## 3. Vòng Lặp Qua Chuỗi
Bạn cũng có thể lặp qua các ký tự trong một chuỗi.
**Ví dụ:**
```python
chuoi = "xin chào"
for ky_tu in chuoi:
print(ky_tu)
```
Kết quả sẽ in ra:
```
x
i
n
c
h
à
o
```
## 4. Sử Dụng `break` và `continue` Trong Vòng Lặp
### `break`
Lệnh `break` sẽ dừng vòng lặp ngay lập tức.
**Ví dụ:**
```python
for i in range(5):
if i == 3:
break
print(i)
```
Kết quả sẽ in ra:
```
0
1
2
```
### `continue`
Lệnh `continue` sẽ bỏ qua phần còn lại của vòng lặp và tiếp tục với lần lặp tiếp theo.
**Ví dụ:**
```python
for i in range(5):
if i == 3:
continue
print(i)
```
Kết quả sẽ in ra:
```
0
1
2
4
```
## Tóm Tắt
- Vòng lặp `for` giúp lặp qua các phần tử trong một dãy (như danh sách hoặc chuỗi).
- `break` dùng để dừng vòng lặp ngay lập tức.
- `continue` dùng để bỏ qua phần còn lại của vòng lặp và tiếp tục với lần lặp tiếp theo.
Bây giờ bạn đã biết cách sử dụng vòng lặp `for` trong Python. Hãy thử làm vài bài tập để vận dụng nhé.
# Hướng dẫn giải bài tập
### **Lưu ý cho phần bài tập:**
1. **Dành thời gian suy nghĩ**:
- Dành ít nhất **10 phút** để tự tìm cách làm cho mỗi bài trước khi đọc hướng dẫn.
2. **Phương pháp khi đọc hướng dẫn**:
- **Bước 1**: Đọc phần **Tóm tắt đề** và suy nghĩ để làm bài trong 10 phút.
- **Bước 2**: Nếu chưa giải được, đọc tiếp phần **Hướng làm bài** và suy nghĩ thêm 10 phút.
- **Bước 3**: Nếu vẫn chưa giải được, đọc phần **Thuật toán** và suy nghĩ thêm 10 phút.
- **Bước 4**: Cuối cùng, dành 5-10 phút để đọc phần **Code lời giải** và hiểu từng dòng code.
---
## [Cánh Diều - CHAON - Chào Nhiều Lần](https://lqdoj.edu.vn/problem/cdl3p1)
### Tóm tắt đề:
Nhập vào một số nguyên N (1 ≤ N ≤ 10^6). Hãy in ra màn hình N câu chào "Hello world!", mỗi câu trên một dòng.
---
### Hướng làm bài:
Ý tưởng: Sử dụng vòng lặp `for` để in ra câu chào "Hello world!" N lần.
#### Các bước thực hiện:
1. Nhập số nguyên N từ bàn phím.
2. Sử dụng vòng lặp `for` để lặp từ 0 đến N-1.
3. Trong mỗi lần lặp, in ra "Hello world!".
---
### Thuật toán:
1. Nhập số nguyên N.
2. Dùng vòng lặp `for` để lặp từ 0 đến N-1.
- Trong mỗi lần lặp, in ra "Hello world!".
---
### Code lời giải:
```python
# Nhập số nguyên N từ bàn phím
N = int(input())
# Sử dụng vòng lặp để in ra câu chào N lần
for i in range(N):
print("Hello world!")
```
---
## [Cánh Diều - TONGCHIAHET3 - Tổng các số tự nhiên chia hết cho 3 nhỏ hơn hoặc bằng n](https://lqdoj.edu.vn/problem/cdl3p2)
### Tóm tắt đề:
Cho số tự nhiên n. Hãy tính tổng các số tự nhiên nhỏ hơn hoặc bằng n mà chia hết cho 3.
---
### Hướng làm bài:
Ý tưởng: Sử dụng vòng lặp `for` để tính tổng các số tự nhiên nhỏ hơn hoặc bằng n mà chia hết cho 3.
#### Các bước thực hiện:
1. Nhập số tự nhiên n từ bàn phím.
2. Khởi tạo biến tổng `sum` bằng 0.
3. Sử dụng vòng lặp `for` để duyệt từ 0 đến n.
4. Trong mỗi lần lặp, nếu số hiện tại chia hết cho 3, cộng số đó vào biến `sum`.
5. Sau khi kết thúc vòng lặp, in ra tổng `sum`.
---
### Thuật toán:
1. Nhập số tự nhiên n.
2. Khởi tạo `sum = 0`.
3. Dùng vòng lặp `for` để duyệt từ 0 đến n:
- Nếu số hiện tại chia hết cho 3, cộng số đó vào `sum`.
4. In ra tổng `sum`.
---
### Code lời giải:
```python
# Nhập số tự nhiên n từ bàn phím
n = int(input())
# Khởi tạo biến tổng
sum = 0
# Sử dụng vòng lặp để tính tổng các số chia hết cho 3
for i in range(n + 1):
if i % 3 == 0:
sum += i
# In ra tổng tìm được
print(sum)
```
---
## [Cánh Diều - TIETKIEM - Tính Tiền Tiết Kiệm](https://lqdoj.edu.vn/problem/cdl3p4)
### Tóm tắt đề:
Cho số tiền ban đầu T (đơn vị triệu đồng). Hãy tính số tiền sau mỗi năm trong 10 năm gửi tiết kiệm với lãi suất 5% mỗi năm, và in ra kết quả sau mỗi năm.
---
### Hướng làm bài:
Ý tưởng: Sử dụng vòng lặp `for` để tính toán và in ra số tiền sau mỗi năm với lãi suất 5%.
#### Các bước thực hiện:
1. Nhập số tiền ban đầu T từ bàn phím.
2. Khởi tạo biến `so_tien_hien_tai` bằng T.
3. Sử dụng vòng lặp `for` để tính toán số tiền sau mỗi năm trong 10 năm.
4. Trong mỗi lần lặp, tính số tiền mới bằng cách nhân số tiền hiện tại với 1.05 (tăng 5%), sau đó in ra kết quả với 3 chữ số phần thập phân.
5. Cập nhật `so_tien_hien_tai` để tiếp tục tính toán cho năm tiếp theo.
---
### Thuật toán:
1. Nhập số tiền ban đầu T.
2. Khởi tạo `so_tien_hien_tai = T`.
3. Dùng vòng lặp `for` để lặp từ 1 đến 10:
- Tính `so_tien_hien_tai` = `so_tien_hien_tai * 1.05`.
- In ra `so_tien_hien_tai` với 3 chữ số phần thập phân.
4. Lặp lại cho đến khi hết 10 năm.
---
### Code lời giải:
```python
# Nhập số tiền ban đầu T từ bàn phím
T = float(input())
# Khởi tạo biến số tiền hiện tại
so_tien_hien_tai = T
# Sử dụng vòng lặp để tính toán và in ra số tiền sau mỗi năm trong 10 năm
for year in range(1, 11):
# Tính số tiền sau mỗi năm
so_tien_hien_tai *= 1.05
# In ra số tiền với 3 chữ số phần thập phân sử dụng hàm format
print(format(so_tien_hien_tai, "0.3f"))
```
### Giới thiệu hàm `format` để in ra 3 chữ số thập phân:
Bạn có thể sử dụng hàm `format` để định dạng số tiền với tùy ý chữ số phần thập phân:
1. Sử dụng hàm `format` in ra 3 chữ số thập phân:
```python
print(format(so_tien_hien_tai, "0.3f"))
2. Sử dụng hàm `format` in ra 4 chữ số thập phân:
```python
print(format(so_tien_hien_tai, "0.4f"))
```
---
## Bài tập ở nhà: [Cánh Diều - DEMSOUOC - Đếm số ước thực sự](https://lqdoj.edu.vn/problem/cdl3p6)
### Tóm tắt đề:
Nhập vào số nguyên 𝑁. Đếm xem có bao nhiêu ước thực sự của 𝑁. Ước thực sự là ước khác 1 và 𝑁.
---
### Hướng làm bài:
Ý tưởng: Vì không có ước nào của N lớn hơn N//2 cả. Nên ta sử dụng vòng lặp để duyệt từ 2 đến 𝑁//2 và đếm số lượng ước của 𝑁.
#### Các bước thực hiện:
1. Nhập số nguyên 𝑁 từ bàn phím.
2. Khởi tạo biến đếm ước `count` bằng 0.
3. Sử dụng vòng lặp `for` để duyệt từ 2 đến 𝑁//2:
- Nếu 𝑁 chia hết cho số hiện tại của vòng lặp, tăng biến `count` lên 1.
4. In ra số nguyên `count`.
---
### Thuật toán:
1. Nhập số nguyên 𝑁.
2. Khởi tạo `count = 0`.
3. Dùng vòng lặp `for` để duyệt từ 2 đến 𝑁//2:
- Nếu 𝑁 chia hết cho số hiện tại của vòng lặp, tăng biến `count` lên 1.
4. In ra số nguyên `count`.
---
### Code lời giải:
```python
# Nhập số nguyên 𝑁 từ bàn phím
N = int(input())
# Khởi tạo biến đếm ước
count = 0
# Duyệt từ 2 đến 𝑁//2 để đếm số lượng ước thực sự
for i in range(2, N // 2 + 1):
if N % i == 0:
count += 1
# In ra số lượng ước thực sự của 𝑁
print(count)
```
---
## [Tổng lẻ - for02](https://lqdoj.edu.vn/problem/for02)
### Tóm tắt đề:
Viết chương trình nhập vào một số nguyên dương 𝑛. Hãy in ra tổng của 𝑛 số tự nhiên lẻ đầu tiên.
---
### Hướng làm bài:
Ý tưởng: Sử dụng vòng lặp `for` để tính tổng các số lẻ trong 𝑛 số tự nhiên đầu tiên.
#### Các bước thực hiện:
1. Nhập số nguyên dương 𝑛 từ bàn phím.
2. Khởi tạo biến tổng `sum` bằng 0.
3. Sử dụng vòng lặp `for` để duyệt qua 𝑛 số tự nhiên đầu tiên.
4. Trong mỗi lần lặp, nếu số hiện tại là số lẻ, cộng số đó vào biến `sum`.
5. Sau khi kết thúc vòng lặp, in ra tổng `sum`.
---
### Thuật toán:
1. Nhập số nguyên dương 𝑛.
2. Khởi tạo `sum = 0`.
3. Dùng vòng lặp `for` để duyệt từ 1 đến 𝑛 (bao gồm cả 𝑛):
- Nếu số hiện tại là lẻ, cộng số đó vào `sum`.
4. In ra tổng `sum`.
---
### Code lời giải:
```python
Đây là bài tập tự luyện ở nhà. Các bạn đọc hướng dẫn rồi tự mình giải bài nhé.
```
---
## [Cánh Diều - GACHO - Bài toán cổ Gà, Chó](https://lqdoj.edu.vn/problem/cdl3p8)
### Tóm tắt đề:
Lập trình giải bài toán cổ tổng quát: Có tổng số 𝑛 con và 𝑚 chân. Hãy đưa ra số lượng gà và chó.
---
### Hướng làm bài:
Ý tưởng: Sử dụng vòng lặp `for` để duyệt tất cả các trường hợp có thể về số lượng gà và chó sao cho tổng số con là 𝑛 và tổng số chân là 𝑚.
#### Các bước thực hiện:
1. Nhập số nguyên 𝑛 (tổng số con) và 𝑚 (tổng số chân) từ bàn phím.
2. Sử dụng vòng lặp `for` để duyệt số lượng gà từ 0 đến 𝑛.
3. Trong mỗi lần lặp, tính số lượng chó bằng tổng số con trừ số lượng gà.
4. Kiểm tra nếu tổng số chân của gà và chó bằng 𝑚.
5. Nếu tìm được, in ra số lượng gà và chó.
6. Nếu không tìm được, in ra "Không thể giải quyết".
---
### Thuật toán:
1. Nhập số nguyên 𝑛 và 𝑚.
2. Sử dụng vòng lặp `for` để duyệt từ 0 đến 𝑛 cho số lượng gà:
- Tính số lượng chó = 𝑛 - số lượng gà.
- Kiểm tra nếu $$ 2 \times soLuongGa + 4 \times soLuongCho = m $$
- Nếu điều kiện thỏa mãn, in ra số lượng gà và chó, sau đó thoát vòng lặp.
3. Nếu không tìm được số lượng gà và chó thỏa mãn, in ra "Không thể giải quyết".
---
### Code lời giải:
```python
Đây là bài tập tự luyện ở nhà. Các bạn đọc hướng dẫn rồi tự mình giải bài nhé.
```
---
# Thắc mắc và hỗ trợ khi làm bài
Nếu trong quá trình giải bài các bạn gặp khó khăn, có thể liên hệ với mình qua Zalo hoặc Facebook dưới đây. Hãy nhớ áp dụng phương pháp được hướng dẫn trước khi nhờ giúp đỡ.
- Zalo: ***0914167544*** (Lê Đức Phúc Long)
- Facebook: m.me/phuclong.leduc