Câu lệnh break, continue và pass trong Python

<p style="text-align: justify;">Trong c&aacute;c b&agrave;i trước, ch&uacute;ng ta đ&atilde; t&igrave;m hiểu c&aacute;ch sử dụng c&aacute;c cấu tr&uacute;c lặp trong Python. Trong c&aacute;c cấu tr&uacute;c n&agrave;y, như đ&atilde; tr&igrave;nh b&agrave;y, c&oacute; một t&ugrave;y chọn l&agrave; sử dụng kết hợp với else chẳng hạn như for...else, while...else. B&igrave;nh thường t&ugrave;y chọn n&agrave;y c&oacute; vẻ kh&aacute; v&ocirc; nghĩa bởi khi tho&aacute;t ra khỏi vằng lặp th&igrave; c&acirc;u lệnh tiếp theo lu&ocirc;n lu&ocirc;n sẽ được thực hiện. Nhưng thực sự kh&ocirc;ng phải vậy. Bởi Python c&ograve;n hỗ trợ một số t&ugrave;y chọn thay đổi để tho&aacute;t hoặc bỏ qua một v&agrave;i v&ograve;ng lặp n&agrave;o đ&oacute;. Đ&oacute; l&agrave; c&aacute;c c&acirc;u lệnh break, continue v&agrave; pass. Trong b&agrave;i n&agrave;y, ch&uacute;ng ta sẽ c&ugrave;ng t&igrave;m hiểu về c&aacute;c h&agrave;m n&agrave;y v&agrave; ứng dụng của n&oacute;. Đặc biệt sẽ c&oacute; một số v&iacute; dụ cho thấy &yacute; nghĩa của khối lệnh else trong v&ograve;ng lặp.</p> <p style="text-align: justify;">C&aacute;c v&ograve;ng lặp lặp đi lặp lại tr&ecirc;n một đoạn m&atilde; cho đến khi biểu thức điều kiện được đ&aacute;nh gi&aacute; l&agrave; False, nhưng đ&ocirc;i khi ch&uacute;ng ta muốn kết th&uacute;c v&ograve;ng lặp hiện tại hoặc thậm ch&iacute; to&agrave;n bộ v&ograve;ng lặp m&agrave; kh&ocirc;ng cần kiểm tra biểu thức điều kiện. C&acirc;u lệnh break v&agrave; continue sẽ được sử dụng trong những trường hợp n&agrave;y.</p> <p style="text-align: justify;">Trong Python, c&aacute;c c&acirc;u lệnh <span class="lang:default decode:true crayon-inline ">break</span> v&agrave; <span class="lang:default decode:true crayon-inline ">continue</span>&nbsp;c&oacute; thể thay đổi luồng thực thi của một v&ograve;ng lặp th&ocirc;ng thường.</p> <h2 style="text-align: justify;">C&acirc;u lệnh break trong Python</h2> <p style="text-align: justify;">C&acirc;u lệnh <span class="lang:default decode:true crayon-inline ">break</span> sẽ kết th&uacute;c v&ograve;ng lặp chứa n&oacute;. Luồng thực thi của chương tr&igrave;nh sẽ chuyển đến c&acirc;u lệnh ngay sau phần th&acirc;n của v&ograve;ng lặp. Nếu c&acirc;u lệnh break nằm trong một v&ograve;ng lặp lồng nhau (v&ograve;ng lặp b&ecirc;n trong một v&ograve;ng lặp kh&aacute;c), c&acirc;u lệnh break sẽ kết th&uacute;c v&ograve;ng lặp nằm b&ecirc;n trong. Hoặc n&oacute;i chung l&agrave; v&ograve;ng lặp gần nhất chứ n&oacute;.</p> <p style="text-align: justify;"><em><strong>C&uacute; ph&aacute;p:</strong></em></p> <pre class="language-python"><code>break</code></pre> <p style="text-align: justify;">V&iacute; dụ 1:</p> <pre class="language-python"><code>a = 5 while a &gt; 0: if a == 3: break print("Python") a = a &ndash; 1</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>Python Python</code></pre> <p style="text-align: justify;">Trong chương tr&igrave;nh n&agrave;y, ch&uacute;ng ta thực hiện in ra một chuỗi k&yacute; tự. Ch&uacute;ng ta kiểm tra xem nếu gi&aacute; trị của biến a = 3, c&acirc;u lệnh break sẽ được thực hiện v&agrave; kết th&uacute;c v&ograve;ng lặp. Do đ&oacute;, ch&uacute;ng ta chuỗi k&yacute; tự "Python" sẽ chỉ được in ra 2 lần, mặc d&ugrave; v&ograve;ng lặp sẽ thực thi in ra chuỗi k&yacute; tự "Python" l&agrave; 5 lần nếu kh&ocirc;ng c&oacute; c&acirc;u lệnh break.</p> <p style="text-align: justify;">Ch&uacute;ng ta sẽ tiếp tục với một v&iacute; dụ cho thấy &yacute; nghĩa của break trong cấu tr&uacute;c for...else.</p> <p>V&iacute; dụ 2:</p> <pre class="language-python" tabindex="0"><code>check = 5 for i in range(10): if i == check: print("T&igrave;m thấy!") break else: print('Kh&ocirc;ng t&igrave;m thấy m&atilde;')</code></pre> <p>Kết quả:</p> <pre class="language-markup" tabindex="0"><code>T&igrave;m thấy!</code></pre> <p style="text-align: justify;">Bạn c&oacute; nhận thấy điều g&igrave; kh&ocirc;ng ạ?</p> <p style="text-align: justify;">Đ&uacute;ng rồi. Nếu b&igrave;nh thường khi kh&ocirc;ng sử dụng c&acirc;u lệnh break th&igrave; c&acirc;u lệnh cuối c&ugrave;ng sẽ vẫn thực thi cho d&ugrave; c&oacute; t&igrave;m thấy biến check=5 hay kh&ocirc;ng. V&agrave; r&otilde; r&agrave;ng điều n&agrave;y l&agrave; kh&ocirc;ng hợp l&yacute;. Nhưng khi c&oacute; c&acirc;u lệnh break, c&acirc;u lệnh n&agrave;y cũng kh&ocirc;ng được thực thi nữa do khối else n&agrave;y được coi l&agrave; c&ugrave;ng khối với for. V&agrave; do đ&oacute;, chương tr&igrave;nh sẽ chỉ in ra chuỗi "Kh&ocirc;ng t&igrave;m thấy m&atilde;" khi thực sự kh&ocirc;ng t&igrave;m được m&atilde; sau v&ograve;ng for (tức l&agrave; kh&ocirc;ng break giữa chừng). Rất tuyệt vời phải kh&ocirc;ng ạ?</p> <p style="text-align: justify;">Đến đ&acirc;y liệu bạn c&oacute; nghĩ ra c&aacute;ch viết 1 chương tr&igrave;nh tương tự m&agrave; kh&ocirc;ng sử dụng cấu tr&uacute;c for...else v&agrave; break n&agrave;y kh&ocirc;ng? H&atilde;y suy nghĩ nh&eacute;!</p> <h2 style="text-align: justify;">C&acirc;u lệnh continue trong Python</h2> <p style="text-align: justify;">C&acirc;u lệnh <span class="lang:default decode:true crayon-inline ">continue</span>&nbsp;được sử dụng để bỏ qua phần c&ograve;n lại của đoạn m&atilde; b&ecirc;n trong v&ograve;ng lặp trong lần lặp hiện tại. V&ograve;ng lặp sẽ kh&ocirc;ng kết th&uacute;c nhưng tiếp tục với lần lặp tiếp theo.</p> <p style="text-align: justify;"><strong><em>C&uacute; ph&aacute;p:</em></strong></p> <pre class="language-python"><code>continue</code></pre> <p style="text-align: justify;">V&iacute; dụ 3:</p> <pre class="language-python"><code>a = 5 while a &gt; 0: if a == 3: a = a - 1 continue print(a) a = a &ndash; 1</code></pre> <p style="text-align: justify;">Kết quả:</p> <pre class="language-markup"><code>5 4 2 1</code></pre> <p style="text-align: justify;">Trong đoạn m&atilde; tr&ecirc;n, ta đặt một điều kiện nếu gi&aacute; trị của biến a = 3, th&igrave; ta sẽ kh&ocirc;ng thực hiện việc in ra gi&aacute; trị l&agrave; 3, m&agrave; ta sẽ tiếp tục v&ograve;ng lặp tiếp theo. Do đ&oacute;, kết quả nhận được sẽ kh&ocirc;ng c&oacute; chứa gi&aacute; trị 3. V&ograve;ng lặp thay v&igrave; in ra 5,4,3,2,1 th&igrave; sẽ bỏ qua gi&aacute; trị 3.</p> <h2 style="text-align: justify;">C&acirc;u lệnh pass</h2> <p style="text-align: justify;">Trong lập tr&igrave;nh Python, c&acirc;u lệnh <span class="lang:default decode:true crayon-inline ">pass</span> l&agrave; c&acirc;u lệnh kh&ocirc;ng thực thi nhiệm vụ n&agrave;o cả. Sự kh&aacute;c biệt giữa một ch&uacute; th&iacute;ch v&agrave; một c&acirc;u lệnh pass trong Python l&agrave; trong khi tr&igrave;nh th&ocirc;ng dịch bỏ qua ho&agrave;n to&agrave;n một ch&uacute; th&iacute;ch, nhưng c&acirc;u lệnh pass th&igrave; sẽ kh&ocirc;ng bị bỏ qua. Tuy nhi&ecirc;n, sẽ kh&ocirc;ng c&oacute; g&igrave; xảy ra khi c&acirc;u lệnh pass được thực thi. Ch&uacute;ng ta thường sử dụng n&oacute; như một c&aacute;ch đễ giữ chỗ cho c&aacute;c đoạn m&atilde; chưa được triển khai ho&agrave;n chỉnh.</p> <p style="text-align: justify;">Giả sử ch&uacute;ng ta c&oacute; một v&ograve;ng lặp hoặc một h&agrave;m chưa được triển khai, nhưng ch&uacute;ng ta muốn triển khai n&oacute; sau n&agrave;y. V&igrave; vậy, ch&uacute;ng ta sử dụng c&acirc;u lệnh pass để tạo một phần th&acirc;n m&agrave; kh&ocirc;ng l&agrave;m g&igrave; cả. V&agrave; sau n&agrave;y, ch&uacute;ng ta nh&igrave;n thấy n&oacute; l&agrave; sẽ biết n&ecirc;n bổ sung ở vị tr&iacute; n&agrave;y.</p> <p style="text-align: justify;">V&iacute; dụ như trong c&aacute;c b&agrave;i viết về lập tr&igrave;nh Python, ta sẽ thực hiện một số đoạn m&atilde; demo nhưng kh&ocirc;ng triển khai cho n&oacute;, ta c&oacute; thể sử dụng c&acirc;u lệnh pass n&agrave;y.</p> <p style="text-align: justify;">Trong một số trường hợp, việc y&ecirc;u cầu tr&igrave;nh bi&ecirc;n dịch trong Python kh&ocirc;ng l&agrave;m g&igrave; cả nhằm thực hiện một mục đ&iacute;ch nhất định. V&iacute; dụ: v&igrave; c&acirc;u lệnh pass kh&ocirc;ng thực hiện bất cứ điều g&igrave;, ta c&oacute; thể sử dụng n&oacute; để đ&aacute;p ứng một y&ecirc;u cầu đ&ograve;i hỏi phải &iacute;t nhất c&oacute; một c&acirc;u lệnh trong đoạn m&atilde; n&agrave;o đ&oacute;.</p> <p style="text-align: justify;">V&iacute; dụ 4:</p> <pre class="language-python"><code>for i in range(5):</code></pre> <p style="text-align: justify;">Trong v&iacute; dụ n&agrave;y, ta sẽ kh&ocirc;ng triển khai nội dung b&ecirc;n trong v&ograve;ng lặp for. Do đ&oacute;, tr&igrave;nh bi&ecirc;n dịch sẽ th&ocirc;ng b&aacute;o lỗi. Để tr&aacute;nh th&ocirc;ng b&aacute;o lỗi n&agrave;y, ta sẽ sử dụng c&acirc;u lệnh pass trong v&ograve;ng lặp for như sau.</p> <pre class="language-python"><code>for i in range(5): pass</code></pre> <p style="text-align: justify;">Ch&uacute;ng ta cũng c&oacute; thể l&agrave;m điều tương tự với một h&agrave;m hoặc một lớp (class) chưa được triển khai đoạn m&atilde; b&ecirc;n trong. </p> <p style="text-align: justify;">V&iacute; dụ:</p> <pre class="language-python"><code>def phep_chia(a, b): pass class sinh_vien: pass</code></pre> <p style="text-align: justify;">Ch&uacute;ng ta sẽ quay lại điều n&agrave;y trong c&aacute;c Chủ đề sau của kh&oacute;a học. Ở đ&acirc;y t&igrave;m lại ta tạm hiểu rằng pass c&oacute; nhiệm vụ giữ chỗ cho c&aacute;c đoạn m&atilde; m&agrave; ta chưa kịp viết, chưa kịp triển khai nhưng vẫn kh&ocirc;ng muốn chương tr&igrave;nh b&aacute;o lỗi hoặc thực hiện sai.</p> <p>Đến đ&acirc;y, ch&uacute;ng ta sẽ tạm dừng b&agrave;i học n&agrave;y ở đ&acirc;y. Để hiểu r&otilde; hơn về &yacute; nghĩa v&agrave; c&aacute;ch sử dụng của break v&agrave; continue, ch&uacute;ng ta sẽ đi qua 2 v&iacute; dụ luyện tập dưới đ&acirc;y.</p>