Trong khi người dùng vòng lặp nhập Python

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ương

Nế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ạy

Ghi 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

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 đúng

while 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àn

Ví 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ệnh

Loại bỏ các quảng cáo

Vò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ệnh

  • Dò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
    
    7

  • Dò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ợp

  • Dò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 ứng

  • Dò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 

    Chủ Đề