While loops Python qua các chỉ mục (phần 2)

While loops qua các chỉ mục (tiếp tục)

Chúng ta cũng có thể đi từ phải qua trái thay vì từ trái qua phải. Chúng ta phải bắt
đầu tại len(s) = 1 thay vì 0, và chúng ta phải giảm i trên mỗi lần lặp hơn là tăng nó.
Chúng ta cũng phải thay đổi biểu thức Boolean của loop để phát hiện khi nào chúng ta ở
phần bắt đầu của string hơn là cuối. Sau đây là làm cách nào chúng ta đi từ phải qua trái,
lặp qua mỗi kí tự:

>>> i = len(s) – 1
>>> while i >= 0:

… print(‘We have ‘ + s[i])
… i = i – 1

We have r
We have y
We have h
We have p
We have e
We have z

Một use case cuối cùng cho một while loop trên một string, dừng ở chỉ mục đầu tiên cái đáp
ứng một vài tiêu chuẩn.
Chiến lược là sử dụng Boolean và toán tử để tiếp tục trong khi có nhiều hơn kí tự để kiểm
tra và chúng ta không đáp ứng các tiêu chuẩn của chúng ta. Ví dụ, sau đây là làm cách nào
chúng ta có thể tìm ra chỉ mục của chữ ‘y’ đầu tiên trong một string:

>>> i = 0
>>> while i < len(s) and s[i] != ‘y’:

… i = i + 1

>>> print(i)
4

Nếu không có ‘y’ ở đâu trong string, loop dừng lại khi i bằng với độ dài string:

>>> s = ‘breeze’
>>> i = 0
>>> while i < len(s) and s[i] != ‘y’:

… i = i + 1

>>> print(i)
6

Khi i tham chiếu đến 6, toán hạng đầu tiên của and là False, nên loop chấm dứt. Bạn có thể
tự hỏi tại sao toán hạng thứ hai của and không gây ra một lỗi ở đây, vì chỉ mục 6 không phải
là một chỉ mục có hiệu lực trong string. Lí do là rằng các toán tử Boolean sử dụng short-circuiting
evaluation, cái có nghĩa rằng chúng dừng đánh giá các toán hạng của chúng nếu kết quả của toán
tử đã được biết đến. Cho and, nếu toán hạng đầu tiên là False, thì chúng ta biết rằng bất kể
toán hạng thứ hai là gì, and sẽ trả về False; Python vì vậy không đánh giá toán hạng thứ hai nữa.
Tương tự, cho or, nếu toán hạng đầu tiên là True, thì or được đảm bảo để trả về True, nên Python
không đánh giá toán hạng thứ hai nữa.

Chia sẻ

Leave a Reply

Your email address will not be published. Required fields are marked *