Nếu bạn đến với Python từ một ngôn ngữ như C, C++, Java hoặc JavaScript, thì có thể bạn đang thiếu cấu trúc vòng lặp do-while của chúng. Vòng lặp do-while là một câu lệnh luồng điều khiển phổ biến thực thi khối mã của nó ít nhất một lần, bất kể điều kiện vòng lặp là đúng hay sai. Hành vi này dựa trên thực tế là điều kiện vòng lặp được đánh giá ở cuối mỗi lần lặp. Vì vậy, lần lặp đầu tiên luôn chạy
Một trong những trường hợp sử dụng phổ biến nhất cho loại vòng lặp này là chấp nhận và xử lý đầu vào của người dùng. Xem xét ví dụ sau được viết bằng C
#include
int main[] {
int number;
do {
printf["Enter a positive number: "];
scanf["%d", &number];
printf["%d\n", number];
} while [number > 0];
return 0;
}
Chương trình nhỏ này chạy một vòng lặp
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
0 … Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
1 yêu cầu người dùng nhập một số dương. Đầu vào sau đó được lưu trữ trong Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
2 và được in ra màn hình. Vòng lặp tiếp tục chạy các hoạt động này cho đến khi người dùng nhập một số không dươngNếu bạn biên dịch và chạy chương trình này, thì bạn sẽ nhận được hành vi sau
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
Điều kiện vòng lặp,
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
3, được đánh giá ở cuối vòng lặp, điều này đảm bảo rằng phần thân của vòng lặp sẽ chạy ít nhất một lần. Đặc điểm này phân biệt vòng lặp do-while với vòng lặp while thông thường, vòng lặp này đánh giá điều kiện vòng lặp ngay từ đầu. Trong một vòng lặp while, không có gì đảm bảo chạy phần thân của vòng lặp. Nếu điều kiện vòng lặp sai ngay từ đầu thì phần thân sẽ không chạyGhi chú. Trong hướng dẫn này, bạn sẽ gọi điều kiện kiểm soát vòng lặp while hoặc do-while là điều kiện vòng lặp. Không nên nhầm lẫn khái niệm này với phần thân của vòng lặp, là khối mã được kẹp giữa các dấu ngoặc nhọn trong các ngôn ngữ như C hoặc được thụt vào trong Python
Một lý do để có cấu trúc vòng lặp do-while là tính hiệu quả. Ví dụ: nếu điều kiện vòng lặp ngụ ý các hoạt động tốn kém và vòng lặp phải chạy n lần [n ≥ 1], thì điều kiện sẽ chạy n lần trong vòng lặp do-while. Ngược lại, một vòng lặp while thông thường sẽ chạy điều kiện đắt n + 1 lần
Python không có cấu trúc vòng lặp do-while. Tại sao? . Có lẽ, đó là lý do tại sao Guido van Rossum từ chối PEP 315, đây là một nỗ lực để thêm vòng lặp do-while vào ngôn ngữ. Một số nhà phát triển cốt lõi muốn có vòng lặp do-while và đang tìm cách khôi phục cuộc thảo luận xung quanh chủ đề này
Trong thời gian chờ đợi, bạn sẽ khám phá các lựa chọn thay thế có sẵn trong Python. Tóm lại, làm thế nào bạn có thể mô phỏng các vòng lặp do-while trong Python?
Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn
Nói ngắn gọn. Sử dụng Vòng lặp Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
1 và Câu lệnh Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
Kỹ thuật phổ biến nhất để mô phỏng vòng lặp do-while trong Python là sử dụng vòng lặp
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
1 vô hạn với một câu lệnh được bao bọc trong một câu lệnh Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
9 để kiểm tra một điều kiện đã cho và ngắt vòng lặp nếu điều kiện đó trở thành đúngwhile True:
# Do some processing...
# Update the condition...
if condition:
break
Vòng lặp này sử dụng
while True:
# Do some processing...
# Update the condition...
if condition:
break
0 làm điều kiện chính thức của nó. Thủ thuật này biến vòng lặp thành vòng lặp vô hạn. Trước câu lệnh điều kiện, vòng lặp chạy tất cả quá trình xử lý cần thiết và cập nhật điều kiện vi phạm. Nếu điều kiện này được đánh giá là đúng, thì câu lệnh Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6 sẽ thoát ra khỏi vòng lặp và quá trình thực thi chương trình tiếp tục lộ trình bình thường của nóGhi chú. Sử dụng vòng lặp vô hạn và câu lệnh
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6 cho phép bạn mô phỏng vòng lặp do-while. Kỹ thuật này là những gì cộng đồng Python thường khuyến nghị, nhưng nó không hoàn toàn an toànVí dụ: nếu bạn đưa ra câu lệnh
while True:
# Do some processing...
# Update the condition...
if condition:
break
3 trước câu lệnh Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6, thì vòng lặp có thể bỏ lỡ điều kiện ngắt và chạy vào một vòng lặp vô hạn không kiểm soát đượcĐây là cách viết Python tương đương với chương trình C mà bạn đã viết trong phần giới thiệu của hướng dẫn này
>>>
>>> while True:
.. number = int[input["Enter a positive number: "]]
.. print[number]
.. if not number > 0:
.. break
...
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
Vòng lặp này lấy đầu vào của người dùng bằng chức năng tích hợp. Đầu vào sau đó được chuyển đổi thành một số nguyên bằng cách sử dụng. Nếu người dùng nhập một số là
while True:
# Do some processing...
# Update the condition...
if condition:
break
7 hoặc thấp hơn, thì câu lệnh Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6 sẽ chạy và vòng lặp kết thúcĐôi khi, bạn sẽ gặp các tình huống cần đảm bảo rằng một vòng lặp sẽ chạy ít nhất một lần. Trong những trường hợp đó, bạn có thể sử dụng
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
1 và Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6 như trên. Trong phần sau, bạn sẽ viết mã trò chơi đoán số sử dụng vòng lặp do-while như vậy để chấp nhận và xử lý thông tin nhập của người dùng tại dòng lệnhVòng lặp Do-While hoạt động như thế nào trong thực tế?
Trường hợp sử dụng phổ biến nhất của vòng lặp do-while là chấp nhận và xử lý đầu vào của người dùng. Ví dụ thực tế, giả sử bạn có một trò chơi đoán số được triển khai bằng JavaScript. Mã này sử dụng vòng lặp
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
0 … Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
1 để xử lý đầu vào của người dùng 1// guess.js
2
3const LOW = 1;
4const HIGH = 10;
5
6let secretNumber = Math.floor[Math.random[] * HIGH] + LOW;
7let clue = '';
8let number = null;
9
10do {
11 let guess = prompt[`Guess a number between ${LOW} and ${HIGH} ${clue}`];
12 number = parseInt[guess];
13 if [number > secretNumber] {
14 clue = `[less than ${number}]`;
15 } else if [number >> while True:
.. number = int[input["Enter a positive number: "]]
.. print[number]
.. if not number > 0:
.. break
...
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
6, để lưu trữ đầu vào của người dùng như được cung cấp tại dòng lệnhDòng 12 chuyển đổi giá trị đầu vào thành số nguyên bằng cách sử dụng
>>> while True:
.. number = int[input["Enter a positive number: "]]
.. print[number]
.. if not number > 0:
.. break
...
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
7Dòng 13 xác định câu lệnh điều kiện kiểm tra xem số nhập vào có lớn hơn số bí mật không. Nếu đúng như vậy, thì
>>> while True:
.. number = int[input["Enter a positive number: "]]
.. print[number]
.. if not number > 0:
.. break
...
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
8 được đặt thành một thông báo thích hợpDòng 15 kiểm tra xem số đầu vào có nhỏ hơn số bí mật hay không và sau đó đặt
>>> while True:
.. number = int[input["Enter a positive number: "]]
.. print[number]
.. if not number > 0:
.. break
...
Enter a positive number: 1
1
Enter a positive number: 4
4
Enter a positive number: -1
-1
8 tương ứngDòng 18 xác định điều kiện lặp để kiểm tra xem số nhập vào có khác số bí mật không. Trong ví dụ cụ thể này, vòng lặp sẽ tiếp tục chạy cho đến khi người dùng đoán được số bí mật
Dòng 20 cuối cùng cũng khởi chạy hộp cảnh báo để thông báo cho người dùng đoán thành công
Bây giờ, giả sử bạn muốn dịch ví dụ trên sang mã Python. Một trò chơi đoán số tương đương trong Python sẽ giống như thế này
# guess.py
from random import randint
LOW, HIGH = 1, 10
secret_number = randint[LOW, HIGH]
clue = ""
while True:
guess = input[f"Guess a number between {LOW} and {HIGH} {clue} "]
number = int[guess]
if number > secret_number:
clue = f"[less than {number}]"
elif number secretNumber] {
14 clue = `[less than ${number}]`;
15 } else if [number secretNumber] {
14 clue = `[less than ${number}]`;
15 } else if [number secretNumber] {
14 clue = `[less than ${number}]`;
15 } else if [number secret_number:
clue = f"[less than {number}]"
elif number secret_number:
clue = f"[less than {number}]"
elif number secret_number:
clue = f"[less than {number}]"
elif number secret_number:
clue = f"[less than {number}]"
elif number secret_number:
clue = f"[less than {number}]"
elif number