Kết thúc vòng lặp Python

Không có iterator liên quan. Nếu bạn không định hướng chi tiết, chỉ cần nhảy xuống dưới cùng để có phản hồi trực tiếp cho truy vấn của bạn. Tiếp tục từ đây để biết thêm về phép lặp và trình vòng lặp


Một chút thuật ngữ. đối với một phép tính gần đúng đầu tiên, phép lặp đang bước qua một tập hợp dữ liệu từng mục một;

  • Một danh sách có thể lặp lại [1,2,3,4]
  • Toán tử for - in biến nó thành một trình vòng lặp và tự động cung cấp lệnh “tiếp theo”. Rât thuận tiện
  • Tuy nhiên, bạn có thể tự làm điều đó bằng cách sử dụng iter()
x = [1,2,3,4]
y = iter(x)
print(y)
    
print(next(y))
print(next(y))
print(next(y))
print(next(y))
print(next(y))

*Đầu ra


1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration

… và vâng, toán tử for-in biết phải làm gì khi StopIteration được nâng lên


Tất cả những điều trên chỉ đơn giản là để chỉ ra rằng không có trình vòng lặp nào trong vòng lặp while. Bạn có thể lập trình vòng lặp while để lặp lại. Bạn thậm chí có thể sử dụng while để tạo một trình vòng lặp; . … trong khi các quy tắc

Nhưng về bản chất, vòng lặp while chỉ đơn giản là kiểm tra một điều kiện nhất định mỗi lần. Nó chỉ lặp lại nếu bạn muốn. Biến mà bạn tăng có thể được gọi là biến lặp, nhưng nó không phải là biến lặp


Vậy câu trả lời cho câu hỏi của bạn là gì?
Ví dụ đầu tiên. Tại sao không bắt đầu với i = 0, sau đó đi với

sum += lst[idx]
idx += 1

mỗi lần xung quanh

Đối với cái thứ hai, hãy nhớ rằng trong khi không nhất thiết phải lặp lại, nó chỉ kiểm tra một điều kiện. Hãy nhớ những gì pop() làm. nó xóa một mục khỏi cuối danh sách và trả về mục đó. Vì vậy, nếu bạn đang loại bỏ một trong số các học sinh khỏi danh sách và thêm chúng vào một danh sách khác, tất cả những gì bạn cần làm để làm cho đúng là quyết định có bao nhiêu học sinh bạn muốn chuyển từ danh sách này sang danh sách khác và đặt số đó vào

Ngoài ra, tôi nghĩ rằng điều đáng nói là phần mô tả nhiệm vụ có thể bị hiểu sai. e. Lúc đầu tôi đã hiểu sai mô tả nhiệm vụ

1. Tạo một hàm có tên là


1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
0 lấy danh sách các số có tên là

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
1 làm tham số

Hàm sẽ tính tổng các phần tử của danh sách cho đến khi tổng lớn hơn


1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
2. Khi điều này xảy ra, hàm sẽ trả về tổng. Nếu tổng của tất cả các phần tử không bao giờ lớn hơn

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
2 , thì hàm sẽ trả về tổng của tất cả các phần tử. Nếu danh sách trống, hàm sẽ trả về

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
4

Ví dụ: nếu


1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
1 là

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
6 thì hàm sẽ trả về

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
0

Bây giờ, đặc biệt là khi họ sử dụng từ “không bao giờ” thay vì “không”, điều đó cho tôi biết rằng hàm sẽ tiếp tục tính tổng danh sách cho đến khi 9000 bị vượt qua, không chỉ cho đến khi đạt đến 9000 hoặc danh sách kết thúc

Vì vậy, tôi đã giả định rằng một danh sách như


1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
1 sẽ tạo ra kết quả là

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
2—i. e. một khi tất cả các phần tử đã được tính tổng và 9000 không bị vượt qua, nó sẽ tiếp tục từ đầu danh sách và tiếp tục—chứ không phải là câu trả lời của

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
3 mà họ đang tìm kiếm

Chỉ sau khi một thông báo lỗi nói rằng danh sách


1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
4 sẽ tạo ra kết quả

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
5 với chức năng của tôi, thay vì

1
2
3
4
Traceback (most recent call last):
  File "C:\path\to\test.py", line 9, in 
    print(next(y))
StopIteration
6 mong muốn, tôi mới nhận ra điều họ thực sự muốn chúng tôi làm

Xin lỗi nếu đây là chỗ sai cho loại phản hồi này, nhưng tôi không chắc nên tiếp tục với nó ở đâu khác và tôi nghĩ ngôn ngữ có thể thực hiện với một lần nữa để làm cho nhiệm vụ hiện tại rõ ràng hơn một chút