### a. Cú pháp:
``` python!
range(start,stop,step)
```
### b. Ý nghĩa:
* Dùng để tạo dãy số nguyên từ $start$ đến trước $stop$ với bước nhảy có giá trị là $step$
* *Thường dùng trong câu lệnh lặp* $for$
* Có 3 tùy chọn tham số cho hàm $range$
* $range(stop)$
* Chỉ có một tham số $stop$
* Tạo dãy số nguyên từ $0$ đến $stop-1$
* Ví dụ: $range(5):\to [0,1,2,3,4]$
* $range(start,stop)$
* Chỉ có hai tham số $start$ và $stop$
* Tạo dãy số nguyên từ $start$ đến $stop-1$
* Ví dụ: $range(2,8):\to [2,3,4,5,6,7]$
* $range(start,stop,step)$: Có đầy đủ các tham số
* Với $step>0$
* Tạo dãy số nguyên từ $start$ đến trước $stop$ với bước nhảy tăng là $step$
* Ví dụ:
* $range(2,20,3):\to [2,5,8,11,14,17]$
* $range(5,19,2):\to [5,7,9,11,13,15,17]$
* $range(15,5,3):\to []$ tạo ra dãy số rỗng (không có số nào)
* Với $step<0$
* Tạo dãy số nguyên từ $start$ đến trước $stop$ với bước nhảy giảm (nhảy lùi) là $step$
* Ví dụ:
* $range(20,2,-3):\to [20,17,14,11,8,5,3]$
* $range(15,5,-2):\to [15,13,11,9,7]$
* $range(5,15,-2):\to []$ tạo ra dãy số rỗng (không có số nào)
## 2. Lệnh lặp for
### a. Cú pháp
```python
for <biến chạy> in range(stop):
<Khối lệnh của for>
```
### b. Ý nghĩa
<Biến chạy> lần lượt nhận từng giá trị của lệnh $range$, mỗi lần nhận thì <**Khối lệnh của for**> thực hiện 01 lần
### Ví dụ:
```python
for i in range(5):
print('Dong thu ',i)
```
Kết quả
```python
Dong thu 0
Dong thu 1
Dong thu 2
Dong thu 3
Dong thu 4
```
## 3. Lệnh lặp while
### a. Cú pháp
```python
while <điều kiện>:
<Khối lệnh của while>
```
### b. Ý nghĩa
## 4. Bài tập
#### [Bài 1. $N$ số tự nhiên đầu tiên 1](https://lqdoj.edu.vn/problem/firstn)
```python
stop=int(input())
for i in range(1,stop+1): #Muốn in đến số stop thì chạy đến stop+1
print(i) #In giá trị biến i và xuống dòng
```
#### [Bài 2. $N$ số tự nhiên đầu tiên 2](https://lqdoj.edu.vn/problem/for01)
Nhận xét: Giống bài 1 nhung in ra các số trên 1 hàng:
$\to$ lệnh `print(i)` thêm `end=' '` $\to$ `print(i,end=' ')`
#### [Bài 3. Tổng lẻ](https://lqdoj.edu.vn/problem/for02)
```python
n=int(input())
S=0
for i in range(1,n+1):
if i%2==1: # Nếu i là số lẻ thì
S=S+i #Thêm giá trị i vào biến S
print(S) #In kết quả S là tổng các số lẻ
```
#### [Bài 4. Ước số của n](https://lqdoj.edu.vn/problem/for03)
**Ước số**: số tự nhiên $b$ được gọi là ước số của $a$ nếu như $a$ chia hết cho $b$ (nghĩa là $a \% b==0$)
**Ví dụ**: Số 10 chia hết cho những số nào? Gồm các số 1; 2; 5; 10
Vậy $1; 2; 5; 10$ là ước số của $10 \Rightarrow 10$ có $4$ ước số.
Thử từng số từ $1$ đến $n$, số nào $n$ chia hết thì đếm
```python=
n=int(input())
for i in range(1,n+1): #i sẽ nhận các giá trị 1,2,...,n
if n % i ==0: #n chia hết cho i => i là ước số của n
print(i,end=' ')#end=' ' in xong thêm dấu cách vào cuối và không xuống dòng
```
```
30 = a * b
a < b
1 < 30
2 < 15
3 < 10
5 < 6
36 = a * b
a <= b
1 < 36
2 < 18
3 < 12
4 < 9
6 <= 6 => So chinh phuong
Căn bậc 2 bình phương của x là bằng x
```
```python=
n=int(input())
for i in range(1,n//2+1): #i sẽ nhận các giá trị 1,2,...,n
if n % i ==0: #n chia hết cho i => i là ước số của n
print(i,end=' ')#end=' ' in xong thêm dấu cách vào cuối và không xuống dòng
```
#### [Bài 5. Số lượng ước số của n](https://lqdoj.edu.vn/problem/for03)
```python=
n=int(input())
cnt=0 #cnt=count = đếm
for i in range(1,n+1): #i sẽ nhận các giá trị 1,2,...,n
if n % i ==0: #n chia hết cho i => i là ước số của n
cnt=cnt+1 # cnt+=1
print(cnt)
```
#### [Bài 6. Bảng số tự nhiên 1](https://lqdoj.edu.vn/problem/w02)
*Nhận xét*: Mỗi dòng in ra $n$ số từ $1,2,...,n$ giống **bài 2**
Vậy, để in $n$ hàng như vậy thì dùng vòng lặp **for** lặp lại $n$ lần.
```py=
n=int(input())
for d in range(n):
for i in range(1,n+1): #Để in n số trên 1 dòng
print(i,end=' ')
print() #Dùng để xuống dòng
```
Dãy số tự nhiên liên tục:
Cho dãy số: $1; 2; 3; ...; n$
Một số công thức:
**Số số hạng (ssh)**: ssh=số cuối - số đầu + 1
*Ví dụ*: $3;4;5;...;123$ có bao nhiếu số hạng
$123 - 3 + 1 = 121$
**Tìm số cuối (sc):** $sc = sd + ssh -1$
Ví dụ:
- Dãy có **7** số bắt đầu từ số $6; 7; 8; ...$. Vậy số cuối là số mấy? $6; 7; 8; 9; 10; 11; 12$. Vậy số cuối 12 = 6+7-1
- Dãy có **67** số bắt đầu từ số $6; 7; 8; ...$. Vậy số cuối là số mấy? $6 + 67 - 1 = 72$
```python=
1 2 3 4 5 6 1 n
2 3 4 5 6 7 2 n+1
3 4 5 6 7 8
4 5 6 7 8 9 i n+i-1
5 6 7 8 9 10
6 7 8 9 10 11
```
* **Nhận xét**:
* Mỗi dòng có $n$ số hạng
* Số đầu ($sd$) của dòng thứ $d$ là số $d$
* $\rightarrow$ $sc = sd + ssh -1$ $= d+n-1$
*
*
```py=
n=int(input())
for d in range(1,n+1):
for i in range(d,d+n-1+1): #Để in n số trên 1 dòng
print(i,end=' ')
print() #Dùng để xuống dòng
```
n=int(input())
for i in range(1,n+1):
for so in range(i,n+i-1+1):
print(i,end=' ')
print()
```python=
sc=sd+ssh-1
=i+i-1
sd sc
1 1 1
2 3 2 3
3 4 5 3 5
4 5 6 7 ......
5 6 7 8 9 i i+i-1
6 7 8 9 10 11
* Nhận xét: Dòng thứ i có i số hạng
n=int(input())
for i in range(1,n+1):
for so in range(i,i+i-1+1):
print(i,end=' ')
print()
1+3+5+7+...+2n-1=n^2
=(1+2n-1)*((2n-2)//2+1)//2
=2n*((n-1)+1)//2
=2n*n//2=n*n
```
$1^3+2^3+3^3+...+n^3=(1+2+3+...+n)^2$
#### [Bài 11. Biến đổi (THT'20)](https://lqdoj.edu.vn/problem/biendoi)
a
a
a
a
a
a
a