[ATBS2nd]Chương 1 - Python cơ bản - Phần 5

Chào các bạn,
Chúng ta lại tiếp tục với các thành phần trong luồng điều khiển(Flow control)
Lệnh while
Bạn có thể thiết lập một vòng lặp liên tục với lệnh while, mệnh đề kiểm tra trong lệnh while được thực hiện khi điều kiện của mệnh đề là True, trong khối code thực hiện while luôn bao gồm

  • Từ khóa while

  • Một điều kiện là một biểu thức có giá trị rút gọn là True hoặc False.

  • Một dấu hai chấm :

  • Dòng tiếp theo sẽ lùi vào 4 khoảng trống gọi là mệnh đề của while.

Bạn có thể thấy rằng một câu lệnh while trông tương tự như một câu lệnh if. Sự khác biệt là cách chúng xử lý. Khi kết thúc mệnh đề if, việc thực hiện chương trình tiếp tục sau câu lệnh if kết thúc. Nhưng ở cuối mệnh đề while, việc thực thi chương trình nhảy trở lại bắt đầu câu lệnh while. Mệnh đề while thường được gọi là vòng lặp while hoặc chỉ vòng lặp.
Chúng ta hãy xem một câu lệnh if và một vòng lặp while sử dụng cùng một điều kiện và thực hiện các hành động tương tự dựa trên điều kiện đó. Đây là đoạn mã với câu lệnh if:

spam = 0
if spam < 5:
    print('Hello, world.')
    spam = spam + 1

Đoạn mã với câu lệnh while

spam = 0
while spam < 5:
    print('Hello, world.')
    spam = spam + 1

Các báo cáo này tương tự với nhau cả if và while khi kiểm tra giá trị của spam và nếu nó nhỏ hơn 5, chúng sẽ in một tin nhắn. Nhưng khi bạn chạy hai đoạn mã này, một cái gì đó rất khác nhau sẽ xảy ra cho mỗi đoạn mã. Đối với câu lệnh if, đầu ra chỉ đơn giản là “Xin chào, thế giới.”. Nhưng while khi tuyên bố, nó HỎI “Hello, world.” lặp lại năm lần! Hãy xem sơ đồ quy trình cho hai đoạn mã này, hai biểu đồ dưới đây, để xem tại sao điều này xảy ra.



Mã với câu lệnh if kiểm tra điều kiện và nó in Hello, world. chỉ một lần nếu điều kiện đó là đúng Mã với vòng lặp while, mặt khác, sẽ in nó năm lần. Vòng lặp dừng sau năm lần in vì số nguyên trong spam tăng thêm một lần vào cuối mỗi lần lặp của vòng lặp, điều đó có nghĩa là vòng lặp sẽ thực thi năm lần trước khi spam <5 là False.
Trong vòng lặp while, điều kiện luôn được kiểm tra ở đầu mỗi phép lặp (nghĩa là mỗi lần vòng lặp được thực thi). Nếu điều kiện là True, thì mệnh đề được thực thi và sau đó, điều kiện được kiểm tra lại.
Lần đầu tiên điều kiện được tìm thấy là False, mệnh đề while bị bỏ qua.
Một vòng lặp while kỳ lạ
Đây là một ví dụ nhỏ về vòng lặp while, bạn hãy mở editor và lưu dưới dạng yourName.py.

name = ''
while name != 'your name':
    print('Please type your name.')
    name = input()
print('Thank you!')

Bạn sẽ thấy chương trình thực hiện theo biểu đồ ở phía dưới.


Bây giờ bạn hãy thực hiện chương trình yourName.py đưa vào vài giá trị khác nhau của biến name chúng ta sẽ thấy cách chương trình chạy.

Please type your name.
Al
Please type your name.
Albert
Please type your name.
%#@#%*(^&!!!
Please type your name.
your name
Thank you!

Nếu bạn không bao giờ nhập vào your name chương trình sẽ không bao giờ dừng lại. Chương trình với hàm input() sẽ liên tục đợi bạn nhập vào và kiểm tra cho đến khi bạn nhập your name.
Lệnh break
Có một lối tắt để sớm thực hiện chương trình thoát khỏi mệnh đề vòng lặp while. Nếu việc thực thi đạt đến một câu lệnh break, nó sẽ ngay lập tức thoát khỏi mệnh đề vòng lặp while. Trong mã, một câu lệnh break chỉ đơn giản chứa từ khóa break.
Khá đơn giản phải không? Ở đây, một chương trình thực hiện tương tự như chương trình trước, nhưng nó sử dụng câu lệnh break để thoát khỏi vòng lặp. Nhập mã sau đây và lưu tệp dưới dạng yourName2.py:

while True:
    print('Please type your name.')
    name = input()
    if name == 'your name':
        break
print('Thank you!')

Khi bạn chạy chương trình yourName2.py và nhập vào tương tự như chương trình yourName.py bạn sẽ nhận được kết quả tương tự, chương trình yourName2.py sẽ chạy theo biểu đồ sau.


Giống như các câu lệnh break, các câu lệnh continue được sử dụng bên trong các vòng lặp. Khi thực hiện chương trình đạt đến một câu lệnh continue, việc thực hiện chương trình ngay lập tức nhảy trở lại điểm bắt đầu của vòng lặp và đánh giá lại điều kiện vòng lặp. (Đây cũng là điều xảy ra khi việc thực thi đến cuối vòng lặp.)
Hãy sử dụng continue viết một chương trình yêu cầu tên và mật khẩu.
Nhập mã sau vào cửa sổ soạn thảo tệp mới và lưu chương trình dưới dạng Swordfish.py.

while True:
    print('Who are you?')
    name = input()
    if name != 'Joe':
         continue
    print('Hello, Joe. What is the password? (It is a fish.)')
    password = input()
    if password == 'swordfish':
        break
print('Access granted.')

Chương trình trên sẽ được mô tả qua biểu đồ sau.


Chạy chương trình Swordfish.py và nhập các giá trị như phía bên dưới.

Who are you?
I'm fine, thanks. Who are you?
Who are you?
Joe
Hello, Joe. What is the password? (It is a fish.)
Mary
Who are you?
Joe
Hello, Joe. What is the password? (It is a fish.)
swordfish
Access granted.

Người dịch: Hungdh

3 Likes

Ad ơi, sau lệnh while là True thì nó mới chạy khối lệnh ở dưới, nếu là False thì nó bỏ qua cả khối lệnh luôn. Vậy người ta để giá trị False sau While có tác dụng gì không ạ?

1 Like

Bạn đang nói đến ví dụ nào?

E nói chung tất cả luôn ạ.

Nếu sau câu lệnh while là một biến thì sao bạn. Ví dụ

check_in = True

n=0

while check_in:

    n += 1

    print(n)

    if n == 5: 

        check_in = False

À, mình hiểu rồi, thanks bạn :3
…Bạn cho mình xin link facebook được không?

Mình đã gửi facebook cho bạn. Bạn check inbox.