You are on page 1of 4

2.

1 Câu lệnh while


Định dạng của một while vòng lặp thô sơ được hiển thị dưới đây:

Python
while <expr>:
<statement(s)>
<statement(s)>: đại diện cho khối được thực thi lặp đi lặp lại, thường được gọi là phần
thân của vòng lặp. Điều này được biểu thị bằng dấu thụt đầu dòng, giống như trong một if
câu lệnh .

Hãy nhớ: Tất cả các cấu trúc điều khiển trong Python đều sử dụng thụt lề để xác định các
khối. Xem phần thảo luận về cách nhóm các câu lệnh trong hướng dẫn trước để ôn lại.

Biểu thức điều khiển, <expr>, thường bao gồm một hoặc nhiều biến được khởi tạo trước
khi bắt đầu vòng lặp và sau đó được sửa đổi ở đâu đó trong thân vòng lặp.

Khi while gặp một vòng lặp, <expr> lần đầu tiên nó được đánh giá trong ngữ cảnh
Boolean . Nếu đúng thì thân vòng lặp được thực thi. Sau đó <expr> được kiểm tra lại và
nếu vẫn đúng, phần thân sẽ được thực thi lại. Điều này tiếp tục cho đến khi <expr> trở
thành sai, tại thời điểm đó việc thực thi chương trình sẽ chuyển sang câu lệnh đầu tiên
ngoài thân vòng lặp
Hãy xem xét vòng lặp này:

Python
1>>> n = 5
2>>> while n > 0:
3... n -= 1
4... print(n)
5...
64
73
82
91
100
Đây là những gì đang xảy ra trong ví dụ này:

 n ban đầu là 5. Biểu thức trong while tiêu đề câu lệnh ở dòng 2 là n > 0 đúng, do
đó phần thân vòng lặp sẽ thực thi. Bên trong thân vòng lặp trên dòng 3, n được
giảm 1 đi 4, rồi được in.
 Khi phần thân vòng lặp kết thúc, việc thực thi chương trình sẽ quay trở lại đầu
vòng lặp ở dòng 2 và biểu thức được đánh giá lại. Nó vẫn đúng nên phần thân
được thực thi lại và 3 được in.
 Điều này tiếp tục cho đến khi n trở thành 0. Tại thời điểm đó, khi biểu thức được
kiểm tra, biểu thức đó sai và vòng lặp kết thúc. Việc thực thi sẽ tiếp tục ở câu lệnh
đầu tiên sau phần thân vòng lặp, nhưng không có câu lệnh nào trong trường hợp
này.

Lưu ý rằng biểu thức điều khiển của while vòng lặp được kiểm tra trước tiên, trước khi
bất kỳ điều gì khác xảy ra. Nếu bắt đầu bằng sai thì phần thân vòng lặp sẽ không bao giờ
được thực thi:

Python
>>> n = 0
>>> while n > 0:
... n -= 1
... print(n)
...
Trong ví dụ trên, khi gặp vòng lặp, n là 0. Biểu thức điều khiển n > 0 đã sai nên phần
thân vòng lặp không bao giờ được thực thi.

Đây là một while vòng lặp khác liên quan đến danh sách, thay vì so sánh bằng số:

Python
>>> a = ['foo', 'bar', 'baz']
>>> while a:
... print(a.pop(-1))
...
baz
bar
foo
Khi một danh sách được đánh giá trong ngữ cảnh Boolean , nó là trung thực nếu nó có
các phần tử trong đó và sai nếu nó trống. Trong ví dụ này, a nó đúng miễn là nó có các
phần tử trong đó. Khi tất cả các mục đã bị xóa bằng .pop() phương thức và danh sách
trống, a là sai và vòng lặp kết thúc.

Trên thực tế, tất cả các cấu trúc điều khiển Python có thể được kết hợp với nhau ở bất kỳ
mức độ nào bạn cần. Lẽ ra nó phải như thế. Hãy tưởng tượng bạn sẽ khó chịu như thế nào
nếu có những hạn chế không mong muốn như “ while Không thể chứa một vòng lặp
trong một if câu lệnh” hoặc “ while các vòng lặp chỉ có thể được lồng vào nhau ở độ sâu
tối đa là bốn vòng”. Bạn sẽ có một thời gian rất khó khăn để nhớ tất cả chúng.
Dường như các giới hạn về số hoặc logic tùy ý được coi là dấu hiệu của thiết kế ngôn ngữ
chương trình kém. May mắn thay, bạn sẽ không bị giới hạn trong Python.

Giống như một if câu lệnh, một while vòng lặp có thể được chỉ định trên một dòng. Nếu
có nhiều câu lệnh trong khối tạo nên thân vòng lặp, chúng có thể được phân tách bằng
dấu chấm phẩy ( ; ):

Python
>>> n = 5
>>> while n > 0: n -= 1; print(n)

4
3
2
1
0
Tuy nhiên, điều này chỉ hoạt động với các câu lệnh đơn giản. Bạn không thể kết hợp hai
câu lệnh ghép thành một dòng. Vì vậy, bạn có thể chỉ định một while vòng lặp trên một
dòng như trên và bạn viết một if câu lệnh trên một dòng:

Python
>>> if True: print('foo')

foo
Nhưng bạn không thể làm điều này:

Python
>>> while n > 0: n -= 1; if True: print('foo')
SyntaxError: invalid syntax
Hãy nhớ rằng PEP 8(một chuẩn quy ước viết mã nguồn Python) không khuyến khích
nhiều câu lệnh trên một dòng. Vì vậy, có lẽ bạn không nên làm điều này thường xuyên.

2.2 Vòng lặp xác định và Vòng lặp không xác định

Hình 1.1: in các số nguyên từ 1 đến 10.


Chúng ta có thể kiểm tra mã và xác định số lần lặp chính xác mà vòng lặp sẽ thực hiện.
Trường hợp này vòng lặp được gọi là vòng lặp xác định, vì chúng ta có thể dự đoán chính
xác số lần lặp lại của vòng lặp. Ngoài ra:

Hình 1.2

Nhìn vào mã nguồn của hình 1.2, chúng ta không thể dự đoán vòng lặp sẽ bao nhiêu lần
lặp lại. Số lần lặp phụ thuộc vào dữ liệu đầu vào do người dùng cung cấp. Tuy nhiên, tại
thời điểm chương trình thực thi sau khi nhận được đầu vào của người dùng và trước khi
bắt đầu thực hiện vòng lặp, chúng ta sẽ có thể xác định số lần lặp mà vòng lặp while sẽ
thực hiện. Vì điều này, vòng lặp trong hình 1.2 cũng được coi là một vòng lặp xác định.
So sánh các chương trình này với hình 1.3 sau đây:

Trong hình 1.3, chúng ta không thể dự đoán tại bất kỳ thời điểm nào trong quá trình thực
thi vòng lặp số lần lặp mà vòng lặp sẽ thực hiện. Giá trị khớp (999) được biết trước và
trong vòng lặp, nhưng biến mục nhập có thể là bất cứ điều gì người dùng nhập vào.
Người dùng có thể chọn chỉ nhập số 0 hoặc nhập ngay 999 là xong. Câu lệnh while trong
hình 1.3 là một ví dụ về một câu lệnh không xác định

Câu lệnh while lý tưởng cho các vòng lặp không xác định. Mặc dù chúng ta đã sử dụng
câu lệnh while để triển khai các vòng lặp xác định, Python cung cấp một giải pháp thay
thế tốt hơn cho các vòng lặp xác định: câu lệnh for.

You might also like