Tại sao vòng lặp for của tôi dừng Python sớm?

vòng lặp for được sử dụng khi bạn có một khối mã mà bạn muốn lặp lại một số lần cố định. Vòng lặp for luôn được sử dụng kết hợp với một đối tượng có thể lặp lại, như danh sách hoặc dải ô. Câu lệnh for của Python lặp lại các phần tử của một dãy theo thứ tự, mỗi lần thực hiện khối đó. Ngược lại câu lệnh for với vòng lặp ''while'', được sử dụng khi một điều kiện cần được kiểm tra mỗi lần lặp hoặc để lặp lại mãi mãi một khối mã. Ví dụ

Đối với vòng lặp từ 0 đến 2, do đó chạy 3 lần

for x in range(0, 3):
    print("We're on time %d" % (x))

Trong khi vòng lặp từ 1 đến vô cùng, do đó chạy mãi mãi

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1

Khi chạy ví dụ trên, bạn có thể dừng chương trình bằng cách nhấn đồng thời ctrl+c. Như bạn có thể thấy, các cấu trúc vòng lặp này phục vụ các mục đích khác nhau. Vòng lặp for chạy trong một số lần cố định, trong khi vòng lặp while chạy cho đến khi điều kiện vòng lặp thay đổi. Trong ví dụ này, điều kiện là giá trị boolean True sẽ không bao giờ thay đổi, vì vậy nó sẽ chạy mãi mãi

Họ làm việc như thế nào?

Nếu bạn đã thực hiện bất kỳ chương trình nào trước đây, chắc chắn bạn đã bắt gặp một vòng lặp for hoặc tương đương với nó. Nhiều ngôn ngữ có các điều kiện trong cú pháp vòng lặp for của chúng, chẳng hạn như biểu thức quan hệ để xác định xem vòng lặp đã hoàn thành hay chưa và biểu thức gia số để xác định giá trị vòng lặp tiếp theo. Trong Python, thay vào đó, điều này được kiểm soát bằng cách tạo chuỗi thích hợp. Về cơ bản, bất kỳ đối tượng nào có phương thức lặp lại đều có thể được sử dụng trong vòng lặp for. Các chuỗi chẵn, mặc dù không có phương thức có thể lặp lại - nhưng chúng tôi sẽ không đề cập đến vấn đề đó ở đây. Về cơ bản, có một phương thức có thể lặp lại có nghĩa là dữ liệu có thể được trình bày ở dạng danh sách, trong đó có nhiều giá trị theo thứ tự. Bạn có thể xác định các lần lặp của riêng mình bằng cách tạo một đối tượng với các phương thức next() và iter(). Điều này có nghĩa là bạn sẽ hiếm khi phải xử lý các số nguyên khi nói đến các vòng lặp for trong Python - tuyệt vời cho bất kỳ ai

Vòng lồng nhau

Khi bạn có một khối mã mà bạn muốn chạy x số lần, thì một khối mã trong mã đó mà bạn muốn chạy y số lần, bạn sử dụng cái được gọi là "vòng lặp lồng nhau". Trong Python, chúng được sử dụng nhiều bất cứ khi nào ai đó có danh sách các danh sách - một đối tượng có thể lặp lại trong một đối tượng có thể lặp lại

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))

Giống như vòng lặp while, vòng lặp for có thể được thực hiện để thoát trước khi kết thúc đối tượng đã cho. Điều này được thực hiện bằng cách sử dụng câu lệnh break, câu lệnh này sẽ ngay lập tức thoát khỏi vòng lặp và tiếp tục thực hiện ở câu lệnh đầu tiên sau khối. Bạn cũng có thể có một mệnh đề khác tùy chọn, mệnh đề này sẽ chạy nếu vòng lặp for thoát ra một cách sạch sẽ - nghĩa là không bị ngắt

for x in range(3):
    if x == 1:
        break

ví dụ

Vì. Khác

for x in range(3):
    print(x)
else:
    print('Final x = %d' % (x))

Chuỗi như một lần lặp

string = "Hello World"
for x in string:
    print(x)

Liệt kê dưới dạng có thể lặp lại

collection = ['hey', 5, 'd']
for x in collection:
    print(x)

Lặp lại Danh sách các danh sách

list_of_lists = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]
for list in list_of_lists:
    for x in list:
        print(x)

Tạo iterable của riêng bạn

________số 8

Trình tạo phạm vi của riêng bạn sử dụng năng suất

def my_range(start, end, step):
    while start <= end:
        yield start
        start += step

for x in my_range(1, 10, 0.5):
    print(x)

Ghi chú về `phạm vi`

Hàm ''phạm vi'' thường xuất hiện trong các câu lệnh for mà bạn có thể nghĩ rằng phạm vi là một phần của cú pháp for. Không phải vậy. đó là một hàm tích hợp sẵn của Python trả về một chuỗi theo một mẫu cụ thể (thường là các số nguyên tuần tự), do đó đáp ứng yêu cầu cung cấp một chuỗi cho câu lệnh for để lặp lại. Vì for có thể hoạt động trực tiếp trên các chuỗi nên thường không cần đếm. Đây là cấu trúc phổ biến dành cho người mới bắt đầu (nếu chúng đến từ ngôn ngữ khác với cú pháp vòng lặp khác)

Vòng lặp trong lập trình cho phép chúng ta thực thi liên tục một tập lệnh/khối mã lệnh cho đến khi thỏa mãn một điều kiện nào đó

Chúng ta cũng có thể sử dụng các vòng lặp để lặp lại một tập hợp dữ liệu và thực hiện thao tác tương tự trên từng mục trong tập dữ liệu

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
0

Trên đây là vòng lặp Python

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
12 lặp qua danh sách tên và in tất cả tên

Trong trường hợp chúng ta muốn dừng lặp lại trước khi đến mục cuối cùng hoặc trước khi một điều kiện nhất định được đáp ứng, chúng ta có thể sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13. Câu lệnh
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 sẽ có điều kiện riêng của nó – điều này cho nó biết khi nào thì "ngắt" vòng lặp

Trong bài viết này, trước tiên chúng ta sẽ xem cách sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 trong vòng lặp
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
12 và
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
17. Sau đó, chúng ta sẽ xem xét một số phương pháp mà chúng ta có thể sử dụng để phá vỡ các vòng lặp lồng nhau trong Python

Làm thế nào để bạn viết một câu lệnh x = 1 while True: print("To infinity and beyond! We're getting close, on %d now!" % (x)) x += 113 bằng Python?

Bạn định nghĩa câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 trong vòng lặp mà bạn muốn nó kết thúc. Trong phần này, chúng ta sẽ xem cách sử dụng câu lệnh
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 trong vòng lặp
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
12 và
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
17

Cách sử dụng câu lệnh x = 1 while True: print("To infinity and beyond! We're getting close, on %d now!" % (x)) x += 113 trong vòng lặp x = 1 while True: print("To infinity and beyond! We're getting close, on %d now!" % (x)) x += 112

Đây là một ví dụ

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
1

Trong đoạn mã trên, chúng tôi đang in một danh sách tên

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
5

Sau đó, chúng tôi đã tạo một điều kiện mới để kiểm tra khi biến

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
55 có tên bằng "Jane". Khi điều kiện đó được đáp ứng, vòng lặp được yêu cầu dừng lại. Nó dừng vì câu lệnh
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 dừng vòng lặp khi
for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
55 là "Jane"

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
9

Điều này cũng giống như nói. "in tất cả các tên và dừng lại khi bạn đến chỗ Jane". Vì vậy, trong bảng điều khiển của chúng tôi, trong số ba tên —

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
58 — chỉ có "John" và "Jane" được in

Chúng ta cũng có thể làm điều này với những con số

for x in range(3):
    if x == 1:
        break
1

Đoạn mã trên in ra một dãy số từ 0 đến 9. Nhưng chúng ta có thể ngăn vòng lặp này in tất cả các số – thay vào đó chúng ta có thể dừng ở một số cụ thể. Đây là cách

for x in range(3):
    if x == 1:
        break
2

Bây giờ các vòng dừng lại ở 5. Vì vậy, chúng tôi sẽ chỉ thấy 0, 1, 2, 3, 4 và 5 trong bảng điều khiển

Cách sử dụng câu lệnh x = 1 while True: print("To infinity and beyond! We're getting close, on %d now!" % (x)) x += 113 trong vòng lặp x = 1 while True: print("To infinity and beyond! We're getting close, on %d now!" % (x)) x += 117

Ví dụ trong phần này sẽ tương tự như ví dụ của phần trước. Thay vào đó, chúng tôi sẽ sử dụng vòng lặp

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
17

for x in range(3):
    if x == 1:
        break
6

Đoạn mã trên in ra một dãy số từ 0 đến 9. Chúng tôi sẽ sử dụng

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 để ngừng in số khi chúng tôi đến 5

for x in range(3):
    if x == 1:
        break
8

Giống như chúng ta đã làm trong phần trước, chúng ta đã tạo một điều kiện mới.

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
93 và khi điều kiện này được đáp ứng, vòng lặp sẽ kết thúc thay vì in tất cả đến 9

Cách sử dụng câu lệnh x = 1 while True: print("To infinity and beyond! We're getting close, on %d now!" % (x)) x += 113 trong vòng lặp lồng nhau

Trong phần này, chúng ta sẽ xem cách sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 trong các vòng lặp lồng nhau

Đây là một vòng lặp lồng nhau trông như thế nào

for x in range(3):
    print(x)
else:
    print('Final x = %d' % (x))
2

Các vòng lặp lồng nhau thường có thể gây nhầm lẫn cho người mới bắt đầu. Vì vậy, nếu bạn đang thắc mắc làm thế nào chúng tôi có kết quả ở trên (được nhận xét trong mã), thì đây là giải thích ngắn gọn

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
96 sẽ cho chúng ta dãy số từ 0 đến  3

Chỉ in

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
97 sẽ cho chúng ta 0, 1, 2, 3. Nhưng chúng tôi đang lồng một dãy số khác trong vòng lặp.
for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
98

Những gì vòng lặp thứ hai thực hiện là nhân đôi mỗi số

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
99 với số lượng số nguyên mà nó có (trong phạm vi
for x in range(3):
    if x == 1:
        break
10). Chúng tôi có bốn số trong phạm vi
for x in range(3):
    if x == 1:
        break
10 – 0, 1, 2, 3

Vì vậy, đối với phạm vi

for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
99, số đầu tiên là 0 và nó sẽ xuất hiện bốn lần. Mỗi lần nó xuất hiện, nó lấy một số từ dãy
for x in range(3):
    if x == 1:
        break
10; . 0 và 0, 0 và 1, 0 và 2, 0 và 3. Điều này áp dụng cho các số khác trong phạm vi
for x in range(1, 11):
    for y in range(1, 11):
        print('%d * %d = %d' % (x, y, x*y))
99

Nếu bạn vẫn thấy điều này khó hiểu, thì hãy thử tự chạy mã. Hãy thử thay đổi phạm vi của từng vòng lặp để xem điều gì xảy ra với đầu ra

Hãy phá vỡ vòng lặp bằng cách sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13

string = "Hello World"
for x in string:
    print(x)
3

Mặc dù vòng lặp trong ví dụ trên dường như đã dừng, nhưng khi xem xét kỹ hơn kết quả đầu ra (đã nhận xét ở trên), bạn sẽ nhận ra rằng vòng lặp bên ngoài vẫn đang in ra tất cả các giá trị của nó, điều không như ý muốn

Vì vậy, chỉ sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 không thực sự phá vỡ một vòng lặp lồng nhau. Hãy xem một số cách giải quyết để đạt được kết quả mong muốn của chúng tôi

Sử dụng biến Boolean

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
10

Trong ví dụ trên, chúng tôi đang sử dụng một biến boolean có giá trị ban đầu là

for x in range(3):
    if x == 1:
        break
17. Khi vòng lặp đến điểm ngắt dự định, chúng tôi đặt giá trị boolean này là
for x in range(3):
    if x == 1:
        break
18, nhưng đó không phải là tất cả. Ta kiểm tra khi biến là
for x in range(3):
    if x == 1:
        break
18 rồi gán câu lệnh
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13

Sử dụng Tuyên bố Break hai lần

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
11

Trong ví dụ này, chúng tôi xác định hai câu lệnh

for x in range(3):
    if x == 1:
        break
21 – cả hai đều trả về câu lệnh
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 để buộc vòng lặp bị ngắt

Mặc dù các giải pháp thay thế này có thể đã kết thúc vòng lặp tại một trường hợp nhất định, nhưng bạn sẽ nhận thấy rằng giá trị của vòng lặp bên trong vẫn giữ nguyên mỗi khi vòng lặp bị ngắt

Điều này không có nghĩa là các vòng lặp lồng nhau là xấu. Nhưng hãy chắc chắn rằng bạn thực sự cần chúng trước khi thực hiện chúng trong logic của bạn

Phần kết luận

Trong bài viết này, chúng ta đã biết cách sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 để kết thúc một vòng lặp trước khi điều kiện ban đầu của vòng lặp được đáp ứng hoặc trước khi quá trình lặp qua các mục trong tập dữ liệu hoàn tất

Chúng tôi đã xem một số ví dụ về cách bạn có thể sử dụng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 trong cả hai vòng lặp
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
12 và
x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
17

Cuối cùng, chúng ta đã nói về các vòng lặp lồng nhau. Chúng tôi phát hiện ra rằng câu lệnh

x = 1
while True:
    print("To infinity and beyond! We're getting close, on %d now!" % (x))
    x += 1
13 không thực sự dừng vòng lặp. Điều này khiến chúng ta thấy một số ví dụ về một số phương pháp mà chúng ta có thể sử dụng để phá vỡ một vòng lặp lồng nhau trong Python

Mã hóa vui vẻ

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Tại sao vòng lặp for của tôi dừng Python sớm?
Ihechikara Vincent Abba

Tiểu sử của tác giả này có thể được tìm thấy trong các bài viết của ông


Nếu bạn đọc đến đây, hãy tweet cho tác giả để cho họ thấy bạn quan tâm. Tweet một lời cảm ơn

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Tại sao vòng lặp của tôi dừng Python?

Python cung cấp hai từ khóa kết thúc sớm một vòng lặp. Câu lệnh break trong Python ngay lập tức kết thúc một vòng lặp hoàn toàn . Việc thực thi chương trình tiếp tục với câu lệnh đầu tiên sau thân vòng lặp. Câu lệnh continue của Python ngay lập tức chấm dứt vòng lặp hiện tại.

Điều gì khiến vòng lặp for kết thúc?

Câu lệnh break thoát hoàn toàn vòng lặp for hoặc while. Để bỏ qua phần còn lại của hướng dẫn trong vòng lặp và bắt đầu lần lặp tiếp theo, hãy sử dụng câu lệnh tiếp tục. break không được xác định bên ngoài vòng lặp for hoặc while. Để thoát khỏi một chức năng, sử dụng return.

Điều gì phá vỡ vòng lặp for trong Python?

'Break' trong Python là câu lệnh điều khiển vòng lặp . Nó được sử dụng để kiểm soát trình tự của vòng lặp. Giả sử bạn muốn kết thúc một vòng lặp và chuyển sang mã tiếp theo sau vòng lặp; . Một tình huống điển hình của việc sử dụng Break trong Python là khi một điều kiện bên ngoài kích hoạt việc kết thúc vòng lặp.

Chúng ta có thể chạy vòng lặp vô hạn trong Python không?

Chúng ta có thể tạo vòng lặp vô hạn trong Python thông qua câu lệnh while . Trong một vòng lặp, biến được đánh giá và cập nhật liên tục (trong khi điều kiện đã cho là Đúng). Chúng ta có thể tạo một vòng lặp vô hạn trong Python nếu chúng ta đặt điều kiện theo cách mà nó luôn đánh giá là Đúng.