Khi tạo một vòng lặp nhỏ trong một vòng lặp lớn, viết code thế nào để dừng được cả hai vòng lặp

while True:
	if "blablabla":
		while True:
			if "blablabla":
			if "blablabla":
			   break

dòng code của em có dạng như trên, em muốn hỏi là viết code như thế nào để chữ break có thể dừng được lệnh while True đầu tiên ạ

Bạn tạo 1 biến để xác nhận lúc nào muốn break thôi.

Đáp án
outer_can_break = False
while not outer_can_break:
    if ...:
        while True:
            if ...:
            if ...:
                outer_can_break = True  # phải gán trước khi break vòng while này
                break

This post was flagged by the community and is temporarily hidden.

My comment is just a hint to the OP.

And you should be careful with your words.

1 Like

Cậu cũng có thể tách toàn bộ loop thành 1 function, và dùng return để kết thúc tất cả thay vì break.

3 Likes

Bạn không nên dùng 2 while True. Hãy biến một vòng while thành biến xác nhận như @noname00 hoặc hàm return như @library gợi ý.

Trong python, nhiều người còn cho rằng không nên dùng while True https://www.quora.com/In-Python-is-while-True-bad-coding-style
Trong trường hợp bạn vẫn muốn dùng while True thì nó luôn nên là câu lệnh ngoài cùng của chương trình hoặc của 1 process/thread con. Việc kết thúc vòng lặp này nên tương ứng với kết thúc vòng đời của thread/process đó.

Mặc khác, cũng không nên dùng goto, vì cấu trúc này dễ làm code rối rắm và mất kiểm soát. Tiêu chuẩn MISRA - một trong những tiêu chuẩn chất lượng cho code trong automotive khuyến nghị không được dùng goto. https://www.mathworks.com/help/bugfinder/ref/misrac2023rule15.1.html
Các ngôn ngữ hiện đại cũng không còn hỗ trợ goto nữa. Hiện tại goto chỉ còn được sử dụng phổ biến trong code C kernel Linux, nơi mà tốc độ được ưu tiên hàng đầu.

Ohm, thực ra sử dụng “goto” để exit most inner loop là valid use case đó cậu :smile: Và có mỗi TH này là valid use case của goto thôi :smile:
Tại đôi khi, có nhiều legacy logic khó có thể tách thành hàm riêng (với 20 parameter nếu tách thành hàm riêng trong 10 vòng lặp lồng nhau chẳng hạn, nó quá phức tạp), hay phải xét biến để thoát vòng lặp ở tất cả các vòng lặp phía trước.

Mỗi tội, python không có, nên tớ đã không đề cập :smile:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?