Bài 4 – Cấu trúc lặp trong ngôn ngữ lập trình Python
1. Lặp với số lần biết trước – Câu lệnh for
a. Hàm range
– Cú pháp: range([<start>],<end>,[<step>])
– Ý nghĩa: Hàm tạo ra dãy giá trị có thể đếm được
– Một số dạng của hàm range như sau:
Hàm range | Ý nghĩa |
range(0,n) | Dãy các giá trị từ 0, 1, 2, … đến n-1 |
range(1,n,2) | Dãy các giá trị từ 1, 3, 5, … đến bé hơn hoặc bằng n-1 |
range(n,0,-1) | Dãy các giá trị từ n, n-1, …, đến 1 (giảm dần) |
range(n) | Dãy các giá trị từ 0, 1, 2, … đến n-1 giống range(0,n) hoặc range(0,n,1) |
b. Câu lệnh for
– Cú pháp:
for <biến vòng lặp> in <dãy giá trị>:
<Dãy các lệnh>
– Trong đó <dãy giá trị> có thể là hàm range, xâu hoặc mảng.
– Ý nghĩa: Biến vòng lặp có giá trị lần lượt từ giá trị đầu đến giá trị cuối của dãy giá trị, mỗi lần lặp thì thực hiện dãy các lệnh trong for.
– Ví dụ:
#1
for i in range(n): print(“Python”)
#Xuất ra màn hình n chữ Python, i có giá trị từ 0 đến n-1
#2
s = “VniTeach”
for ch in s: print(ch)
#Xuất ra màn hình trên mỗi dòng các chữ cái V, n, i, T, e, a, c, h
#3
s = 0;
for i in range(0,101,2): s += i
#Tính tổng các số chẵn từ 0 đến 100
#4
#Đếm các ước số thực sự của n
dem = 0
for i in range(1,n):
if n%i == 0: dem += 1
print(f“Số các ước số thực sự của {n} là {dem}”)
#5
for x in range(1,100//5):
for y in range(1,100//3):
z = 100 – (x + y)
if 15*x + 9*y + z == 300: print(f”{x} {y} {z}”)
2. Lặp với số lần chưa biết trước – Câu lệnh while
– Cú pháp:
while <điều kiện>:
<Dãy các lệnh>
– Ý nghĩa: Trong khi điều kiện còn đúng thì dãy các lệnh còn được thực hiện
– Ví dụ:
(1) Tính và đưa kết quả ra màn hình tổng: \[S=\frac{1}{a}+\frac{1}{a+1}+\frac{1}{a+2}+…+\frac{1}{a+n}+…\]
cho đến khi $\frac{1}{a+n}<0,0001$, với a nhập vào từ bàn phím.
Chương trình:
a = int(input(“Moi nhap a: “))
S = 0; n = 0;
while not (1/(a+n)<0.0001):
S += 1/(a+n)
n += 1
print(“Tổng cần tính là”,S)
(2) Viết chương trình nhập vào 2 số nguyên dương, tính và xuất ra màn hình ước chung lớn nhất và bội chung nhỏ nhất của 2 số đó.
– Chương trình:
m, n = map(int,input(“Mời nhập 2 số nguyên dương: “).split())
tich = m*n
while m != n:
if m>n: m -= n
else: n -= m
print(“Ước chung lớn nhất là:”,m)
print(f“Bội chung nhỏ nhất là: {tich/m: .0f}”)
3. Câu lệnh break, continue, pass và else trong cấu trúc lặp
a. Câu lệnh break, continue và pass
Câu lệnh | Ý nghĩa |
break | Dùng để thoát ngay khỏi câu lệnh lặp kể từ vị trí của break |
continue | Dùng để bỏ qua vòng lặp hiện tại kể từ vị trí của continue và chuyển ngay sang vòng lặp tiếp theo |
pass | Câu lệnh hình thức để đủ cú pháp, không làm gì cả |
b. Câu lệnh else của câu lệnh for, câu lệnh while (Chỉ thực sự có ý nghĩa khi lệnh lặp sử dụng break)
– Câu lệnh for
for <biến vòng lặp> in <dãy giá trị>:
<Dãy các lệnh 1>
[else:
<Dãy câu lệnh 2>]
– Câu lệnh while
while <điều kiện>:
<Dãy các lệnh 1>
[else:
<Dãy câu lệnh 2>]
Trong đó: <Dãy câu lệnh 2> chỉ bị bỏ qua khi trong for và while có sử dụng câu lệnh break
Phần bài tập về Cấu trúc lặp trong Python
Câu 1: Viết chương trình tính tổng các số từ 1 đến n, với n là số nguyên dương nhập vào từ bàn phím?
Câu 2: Viết chương trình tính tổng của bình phương các số lẻ từ 1 đến n, với n là số nguyên dương nhập vào từ bàn phím?
Câu 3: Viết chương trình nhập vào hai số nguyên dương m và n (m>n), xuất ra màn hình ước chung lớn nhất và bội chung nhỏ nhất của 2 số đó?
Câu 4: Viết chương trình kiểm tra số nguyên dương n nhập vào từ bàn phím có phải là số hoàn hảo hay không?
Câu 5: Viết chương trình đếm các số nguyên tố nhỏ hơn n, với n là số nguyên dương nhập vào từ bàn phím?
Câu 6: Viết chương trình giải bài toán cổ:
Trăm trâu trăm bó cỏ
Trâu đứng ăn năm
Trâu nằm ăn ba
Lụ khu trâu già
Ba con một bó
Hỏi có bao nhiêu trâu đứng, trâu nằm và trâu già?
Xem tiếp Bài 5 – Kiểu dữ liệu xâu trong ngôn ngữ lập trình Python