Vòng lặp while trong python là gì?

Nathaniel Bowden tốt nghiệp Đại học Wheaton với bằng Cử nhân Khoa học Vật lý và Cử nhân Nghệ thuật bằng tiếng Tây Ban Nha. Thầy có 2 năm kinh nghiệm làm Trợ giảng cho bộ môn Vật lý

Xem tiểu sử
  • Người hướng dẫnShweta Gadagkar

    Shweta có bằng Thạc sĩ về Kỹ thuật Hóa sinh và là một người đam mê mã hóa

    Xem tiểu sử
  • Vòng lặp while trong Python là gì? . Hiểu sự khác biệt giữa vòng lặp while và vòng lặp for. Đã cập nhật. 28/12/2021

    Mục lục

    Trình diễn

    Vòng lặp While trong Python

    Câu lệnh while trong python đặt một khối mã được thực thi lặp đi lặp lại cho đến khi một điều kiện bị sai lệch. Cấu trúc của vòng lặp while cho phép tổng số lần lặp hoặc số lần lặp không được biết ngay từ đầu. Ví dụ về các trường hợp sử dụng có thể liên tục lấy đầu vào của người dùng cho đến khi đầu vào chính xác, đọc các dòng từ tệp cho đến khi đạt được một phần thông tin cụ thể hoặc đánh giá thuật toán toán học cho đến khi đạt được độ chính xác mong muốn. vòng lặp while là một câu lệnh luồng điều khiển như for và if-elif-else. Định dạng cho mệnh đề while, trong python, là ['#' biểu thị nhận xét]

    # stuff before the while loop, e.g.:

    count = 0

    condition = lambda x: x = 0:

        time.sleep[1] # pauses for 1 second so humans can see the countdown

        # there will be a 1s pause after 'blastoff in...' but less before 'BLASTOFF!'

        print[f'T-{count}']

        count -= 1

     

    time.sleep[0.25]

    print['BLASTOFF!']

    Đầu ra của chương trình là

    Enter countdown duration in seconds: 5

    Blastoff in 5 seconds:

    T-5

    T-4

    T-3

    T-2

    T-1

    T-0

    BLASTOFF!

    trong đó có khoảng 1 giây tạm dừng giữa mỗi dòng 'T-#'. [Để xem kết quả hoạt hình, hãy sao chép và dán mã vào tập lệnh Python, sổ ghi chép hoặc trình biên dịch trực tuyến như repl. nó]

    Trong chương trình, hàm 'input[]' được sử dụng để lấy thời gian 'bắt đầu' từ người dùng, được đặt là 'int' vì 'input' trả về đầu vào của người dùng dưới dạng chuỗi. Các hàm 'print[]' xuất số đếm bằng cách sử dụng các chuỗi được định dạng [như f'T-{count}', trong đó 'f' báo cho trình thông dịch đặt giá trị của 'count' vào chuỗi]. Thời gian. sleep[]' sẽ tạm dừng chương trình một thời gian ngắn để chương trình thực thi với tốc độ mà con người có thể cảm nhận được. Trước khi vào vòng lặp và trên mỗi lần lặp, điều kiện 'đếm >= 0' được chọn;

    Kiểm tra đầu vào của người dùng

    Như đã đề cập trước đó, vòng lặp while là tốt nhất khi tổng số lần lặp không biết trước. Khi người dùng được truy vấn đầu vào và đầu vào đó phải được kiểm tra tính chính xác, vòng lặp while có thể được sử dụng để lặp lại truy vấn cho đến khi đầu vào hợp lệ. Ví dụ bên dưới sử dụng vòng lặp while để lấy số điện thoại hợp lệ ở Hoa Kỳ từ người dùng. Chương trình sử dụng mô-đun biểu thức chính quy tích hợp sẵn của Python 're' để khớp chuỗi đầu vào với định dạng số điện thoại mong muốn

    import re

     

    # a regular expression that should match a phone number

    # with 3 digit area code, 3 digit office/exchange/provider

    # number, and 4 digit subscriber number, followed by

    # optional 4 digit extension. The user must enter in the form

    # [***]-***-**** or [***]-***-**** ext. ****

    phoneRE = r"\[[?P[0-9]{3}]\]-[?P[0-9]{3}]-[?P[0-9]{4}][ [E|e]xt. [?P[0-9]{4}]]?"

     

    # define quick function to query the user

    def query[]:

        return input['Enter your US phone number in the form [***]-***-****, \n' +

                   "include any extension using ext. ****.\n"]

     

    match = re.fullmatch[phoneRE, query[]]

    while not match:

        print['Invalid phone number, try again.']

        match = re.fullmatch[phoneRE, query[]]

     

    print["Successfully updated phone number to:"]

    print[match.expand['[\g]-\g-\g ext. \g']]

    Một ví dụ về đầu ra là

    Enter your US phone number in the form [***]-***-****,

    include any extension using ext. ****.

     44-989-7878

    Invalid phone number, try again.

    Enter your US phone number in the form [***]-***-****,

    include any extension using ext. ****.

     [888] 777 4545 ext. 7009

    Invalid phone number, try again.

    Enter your US phone number in the form [***]-***-****,

    include any extension using ext. ****.

     [888]-777-4545 ext. 7009

    Successfully updated phone number to:

    [888]-777-4545 ext. 7009

    Chương trình đang tìm kiếm một kết quả khớp chính xác của định dạng được chỉ định, vì vậy ngay cả khi số Hoa Kỳ được nhập bằng dấu cách, vòng lặp được đánh giá lại, nhưng đầu vào thành công khi nhập cùng một số bằng dấu gạch ngang

    The variable 'phoneRE' is a raw string [the r"..." syntax] with special regular expression syntax which indicates it should match a 3-digit area code, 3-digit provider code, 4-digit subscriber number, and optional 4-digit extension in the named fields [?P...]. The digit matching is carried out by [0-9]{m} which matches exactly m numbers in the range 0-9. The phone number must be in the format [###]-###-### [ext. ####], so the parentheses and dash characters occur explicitly in the string, the parentheses using slashes so they are interpreted as literals and not grouping parentheses. The extension can be optional because the '?' at the end of its group indicates that ' ext. ####' may appear 0 or 1 time in the string to be matched.

    Các hoạt động phù hợp thực sự được thực hiện bởi re. fullmatch[], trả về Không có nếu chuỗi đầu vào không khớp hoàn toàn với phoneRE. Không có giá trị thực nào là Sai, vì vậy nếu đầu vào ban đầu không hợp lệ, vòng lặp while sẽ được nhập và truy vấn và so khớp sẽ lặp lại, nếu không thì vòng lặp while sẽ bị bỏ qua. Sau khi có được kết quả trùng khớp, vòng lặp sẽ thoát và kết quả được in ở định dạng chuẩn, giải nén các trường được đặt tên khỏi biểu thức chính quy

    Vòng lặp vô hạn

    Nếu một vòng lặp trong Python được triển khai không chính xác, một vòng lặp vô hạn có thể dẫn đến. Vòng lặp vô hạn là vòng lặp lặp đi lặp lại vô thời hạn vì điều kiện để vòng lặp tiếp tục không bao giờ có thể sai trong chương trình. Ví dụ: nếu dòng 'đếm -= 1' không có trong mã Hoạt hình đếm ngược ở trên,

    import time

     

    start = int[input['Enter countdown duration in seconds: ']]

     

    print[f'Blastoff in {start} seconds:']

     

    count = start

    while count >= 0:

        time.sleep[1] # pauses for 1 second so humans can see the countdown

        # there will be a 1s pause after 'blastoff in...' but less before 'BLASTOFF!'

        print[f'T-{count}']

        # MISSING count -= 1 statement

     

    time.sleep[0.25]

    print['BLASTOFF!']

    đầu ra của chương trình sẽ trở thành

    Enter countdown duration in seconds: 5

    Blastoff in 5 seconds:

    T-5

    T-5

    T-5

    T-5

    T-5

    ...

    sẽ tiếp tục in dòng 'T-5' ra đầu ra một lần mỗi giây cho đến khi dừng ở bên ngoài. Do câu lệnh giảm dần bị thiếu, đếm >= 0 luôn đúng và vòng lặp tiếp tục chạy. Vòng lặp trong ví dụ này cũng sẽ là vô hạn nếu có số giảm, 'đếm -= 1', nhưng điều kiện được viết sai thành 'đếm

    Chủ Đề