Chúng ta có thể tránh vòng lặp vô hạn bằng cách sử dụng vòng lặp for trong Python không?

Nhận xét của Serhiy ở đây là lý do khái niệm chính khiến phạm vi không giới hạn không được phép. chúng được định nghĩa là các trình tự được tính toán hiệu quả bằng bộ nhớ chứ không phải là các trình vòng lặp tiêu hao, do đó, chúng được cho là có giới hạn dưới và giới hạn trên, mặc dù các giới hạn đó có thể lớn

Điều đó nói rằng, đã có một số phép toán phạm vi đưa ra ngoại lệ nếu độ dài chuỗi không vừa với 64 bit, do đó, không thể tưởng tượng được có trường hợp đặc biệt cho “dừng = Không”. Tuy nhiên, không giống như trường hợp “trình tự được tính toán không phù hợp với không gian địa chỉ 64 bit”, trường hợp trình tự không bị chặn sẽ làm chậm nhiều hoạt động với các kiểm tra bổ sung cho Không, hoặc nếu không, chúng ta phải chơi trò chơi xây dựng để trả về một

Ngược lại, “số lần nhập từ itertools” rất đơn giản để hiểu về mặt khái niệm và dễ bảo trì

Python nổi tiếng là một ngôn ngữ lập trình rất linh hoạt. Nó cung cấp vô số cách để đạt được cùng một mục tiêu — một số cách hợp lý hơn những cách khác

Trong bài viết này, tôi sẽ chỉ cho bạn bảy cách để đạt được một vòng lặp vô hạn trong Python, bắt đầu từ cách tiếp cận phổ biến nhất và dần dần chuyển sang các kỹ thuật phức tạp và kỳ lạ hơn

cổ điển trong khi đúng

Cách tiếp cận Pythonic nhất đối với vòng lặp vô hạn là sử dụng vòng lặp while với giá trị bằng chữ đúng liên tục đơn giản. True

Rất đơn giản, phải không? . Hãy thú vị hơn với kỹ thuật tiếp theo

Danh sách đệ quy vô hạn

Trong lập trình, không có thứ gọi là đệ quy vô hạn cho hàm vì điều đó sẽ gây tràn ngăn xếp. Tuy nhiên, cấu trúc dữ liệu có thể tự tham chiếu mà không gặp bất kỳ sự cố nào

Trong ví dụ này, chúng tôi xác định một danh sách trống và nối nó vào chính nó. Nếu sau đó chúng tôi cố gắng duyệt qua danh sách lồng nhau, chúng tôi sẽ không bao giờ đi đến cuối. Thực tế này có thể được khai thác để tạo một vòng lặp vô hạn và thực thi mã trong phần thân của nó

Vòng lặp vô hạn

Vòng lặp for phổ biến trong Python, ngoại trừ các vòng lặp vô hạn. Bạn không thể chỉ lặp qua một phạm vi vô hạn với for i in range[math.inf]:. Tuy nhiên, nếu bạn biết cách hoạt động của trình vòng lặp Python, bạn có thể viết trình vòng lặp vô hạn của riêng mình

Vòng lặp for-in hoạt động bằng cách gọi phương thức __next__[] của đối tượng iterable [e. g. range, list, str…] cho mỗi lần lặp lại mới. Một ngoại lệ StopIteration được đưa ra nếu lần lặp đã được sử dụng hoàn toàn. Vì vậy, mẹo đối với một vòng lặp vô hạn là đừng bao giờ tăng StopIteration. Đây là một ví dụ

Như bạn có thể thấy, không có StopIteration trong phương thức __next__[]. Tôi cá là bạn chưa bao giờ sử dụng hoặc thậm chí nghe nói về vòng lặp for vô hạn trong Python. Mọi thứ sẽ trở nên kỳ lạ hơn kể từ bây giờ

Goto vòng lặp

Thoạt nhìn, phản ứng của một số bạn có thể giống như. "Cái gì?

Vào ngày 1 tháng 4 năm 2004, một mô-đun có tên True1 đã được xuất bản như một trò đùa Cá tháng Tư. Như bạn có thể mong đợi, mục đích của nó là thêm tính năng goto vào Python. Mặc dù nó chỉ là một trò đùa và không nên được sử dụng trong mã thực, nhưng nó vẫn hoạt động

Mô-đun này rất cũ và không tương thích với Python3, nhưng tôi thấy rằng nó hoạt động tốt với phiên bản Python2 mới nhất. Bạn có thể tìm thấy mô-đun True1 tại liên kết này

Một số nhà phát triển cũng đã viết phiên bản tương thích với Python3 của mô-đun này, nhưng tôi không thể làm cho nó hoạt động vì một số lý do, vì vậy tôi sẽ không đề cập đến nó

Vòng lặp vô hạn theo thống kê

Cho đến bây giờ, chúng ta mới chỉ thấy những vòng lặp thực sự vô tận sẽ không bao giờ dừng lại trong bất kỳ trường hợp nào. Ví dụ sau đây cho thấy một vòng lặp có xác suất đứt cực kỳ thấp, nhưng không chính xác bằng 0

Điều kiện lặp là biến True3 nhỏ hơn một số lớn. Bên trong vòng lặp, biến True3 có cơ hội tăng, giảm hoặc giữ nguyên không bằng nhau. Theo thống kê, True3 sẽ ở quanh mức 0, cộng hoặc trừ một số biến động ngẫu nhiên rất khó có thể cộng thành một số lượng lớn trong điều kiện

Hàng đợi được liên kết thay đổi vô hạn

Ngoài việc nghe có vẻ giống như động tác đặc biệt của một nhân vật anime lập trình kỳ lạ nào đó, đây còn là một kỹ thuật để đạt được vòng lặp vô hạn bằng cách lấy một phần tử từ hàng đợi và ngay lập tức thêm lại phần tử đó.

Phần "được liên kết" của tên là do hàng đợi này được triển khai thông qua danh sách được liên kết, điều này là cần thiết vì Python không cho phép hành vi này đối với danh sách thông thường

Đây là mã cho hàng đợi được liên kết

Và đây là cách bạn sẽ sử dụng nó trong một vòng lặp

Vì mỗi khi một phần tử được lấy ra khỏi hàng đợi, nó sẽ bị đẩy trở lại, nên True6 sẽ không bao giờ là True7, do đó đạt được một vòng lặp vô hạn. Ngoài ra, bạn có thể làm cho lớp này có thể lặp lại thông qua các phương thức ma thuật True8 và __next__[] và thay vào đó sử dụng vòng lặp for-in

Ví dụ này cũng cho thấy lý do tại sao bạn không nên sửa đổi cấu trúc khi lặp qua cấu trúc đó, vì điều đó có thể dẫn đến các hành vi không mong muốn

Vòng lặp số vô tỉ vô hạn

Bây giờ hãy chuyển từ cấu trúc dữ liệu sang toán học. Trong toán học, số vô tỉ là những số thực không biểu diễn được dưới dạng tỉ số của hai số nguyên. Một tính chất quan trọng khác của số vô tỷ là chúng có các chữ số vô tận [không lặp lại] ở bên phải dấu thập phân

Do “vô số chữ số” này, các số vô tỉ có số thập phân vô hạn và do đó cần vô số thời gian và thao tác để tính toán chính xác. Chúng ta có thể tận dụng thực tế này bằng cách đưa đoạn mã được lặp lại vào phép tính một số vô tỷ

Hàm sau tính căn bậc hai của một số đã cho không có xấp xỉ thập phân

Vì vậy, nếu chúng ta cho nó một số có căn bậc hai là số vô tỷ, thì sẽ mất rất nhiều thời gian để tính toán câu trả lời, do đó đạt được một vòng lặp vô hạn vì toán học. Ví dụ: chúng ta có thể thử tính căn bậc hai của for i in range[math.inf]:0 mà chúng ta biết là không hợp lý

sqrt[2]

Và chức năng sẽ không bao giờ trở lại trừ khi mã được đưa vào làm như vậy

Phần kết luận

Lập trình bằng Python rất linh hoạt và có vô số cách để đạt được kết quả tương tự. Mặc dù một số cách tiếp cận có ý nghĩa, nhưng những cách tiếp cận khác chỉ là các kỹ thuật được thiết kế quá mức chỉ nhằm mục đích hack bằng chứng khái niệm hoặc một bài tập mã hóa

Vô cực chỉ là ảo ảnh. Ngay cả `trong khi đúng` cũng sẽ kết thúc khi máy tính cuối cùng bị cắt bởi lưỡi hái thời gian

Tôi hy vọng bạn thích bài viết này. Nếu bạn biết bất kỳ cách thú vị nào khác để đạt được vòng lặp vô hạn trong Python, vui lòng chia sẻ nó trong phần nhận xét. Cảm ơn vì đã đọc

Đây là bài viết thứ tư của loạt bài mà tôi đã khám phá nhiều cách tiếp cận thú vị và được thiết kế kỹ lưỡng khác nhau để đạt được các tác vụ đơn giản trong Python. Trong trường hợp bạn bỏ lỡ câu chuyện cuối cùng, bạn có thể tìm thấy nó bên dưới

Làm cách nào để tránh các vòng lặp vô hạn trong Python?

Bạn có thể dừng vòng lặp vô hạn bằng CTRL + C .

Chúng ta có thể tránh vòng lặp vô hạn bằng cách sử dụng vòng lặp for không?

Trong vòng lặp for[]. Để tránh kết thúc trong một vòng lặp vô tận khi sử dụng câu lệnh for, hãy đảm bảo rằng các câu lệnh trong khối for[] không bao giờ thay đổi giá trị của biến bộ đếm vòng lặp. If they do, then your loop may either terminate prematurely or it may end up in an infinite loop.

Vòng lặp for trong Python có thể là vô hạn 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.

Chủ Đề