--------------- <> -----------------
--- KHOA HỌC - CÔNG NGHỆ - GIÁO DỤC - VIỆC LÀM ---
--- Học để đi cùng bà con trên thế giới ---

Tìm kiếm trong Blog

Python (16) - Vòng lặp while

Bài trước: Python (15) - Lệnh điều kiện (tiếp)
-----

16. Lệnh lặp while

Ở bài học trước, bạn đã biết cách sử dụng lệnh điều kiện (lệnh if) để điều khiển máy tính xử lý dựa trên điều kiện đúng hoặc sai.

Trong bài học này, bạn sẽ tiếp tục học thêm một kỹ thuật nữa để điều khiển máy tính, đó là lệnh lặp.

Lặp nghĩa là làm một việc gì đó nhiều lần.

Ví dụ, bạn có một danh sách các học sinh, bạn cần in danh sách ra màn hình.

Cách đơn giản, bạn sẽ làm như sau:

print("An")

print("Bình")

print("Chi")

# Phải viết tiếp cho tới khi hết danh sách…

Tuy nhiên, bạn có thể làm theo cách này:

danh_sach = ["An", "Bình", "Chi", "Dũng", "Em"] 

for ten in danh_sach: 

print(ten)

16.1 Lệnh lặp while là gì

While có nghĩa là “trong khi”.

Lệnh lặp while có nghĩa là “trong khi một điều kiện logic còn đúng, thì thực hiện một khối mã lệnh”

Cú pháp:

while điều_kiện_logic: 

    # Khối lệnh được lặp lại (phải thụt lề vào 4 khoảng trắng) 

    # Các câu lệnh cập nhật điều kiện

Giải thích các thành phần trong lệnh while:

- while: là từ khóa của Python, khai báo bắt đầu một vòng lặp

- điều_kiện_logic: là một biểu thức so sánh (giống như trong lệnh if)

    + Nếu biểu thức so sánh có giá trị là True: Các câu lệnh bên dưới sẽ được thực thi

    + Nếu biểu thức so sánh có giá trị là False: vòng lặp dừng lại ngay lập tức và chuyển xuống các lệnh phía sau vòng lặp

- Khối lệnh được lặp lại: tất cả các lệnh nằm sau dấu hai chấm : và được thụt lề đều nhau sẽ thuộc về vòng lặp

- Bên trong vòng lặp, bạn phải có một câu lệnh làm thay đổi giá trị của biến liên quan đến điều_kiện_logic. Nếu không, điều kiện sẽ luôn đúng, và tạo ra vòng lặp vô tận

Chúng ta cùng lập trình một ví dụ sử dụng vòng lặp while. Cho người dùng nhập vào số dương (n), tính tổng từ 1 tới n. Ví dụ n = 3, kết quả sẽ là 1 + 2 + 3 = 6.

n = int(input("Nhập số N: ")) 

tong = 0 

i = 1 

while i <= n: 

tong = tong + i # cộng dồn giá trị của i vào biến tong 

i = i + 1 # tăng i lên 1 để tiếp tục vòng lặp 

print(f"Tong cac so tu 1 đến {n} la: {tong}")

16.2 Một số xử lý đặc biệt của vòng lặp while

Lệnh break

Lệnh break dùng để thoát khỏi vòng lặp ngay lập tức, ngay cả khi điều kiện của while vẫn đang đúng (True).

Lệnh break còn được gọi là “lệnh dừng khẩn cấp”.

Chúng ta cùng trải nghiệm với lệnh break qua một ví dụ. 

Lập trình để tìm số đầu tiên trong dãy số chia hết cho một số khác và dừng lại. Ví dụ: Tìm số nhỏ nhất lớn hơn 100 mà chia hết cho 17.

i = 101

while i < 200:

    if i % 17 == 0:

        print(f"Số đầu tiên chia hết cho 17 là: {i}")

        break  # Tìm thấy rồi nên dừng vòng lặp ngay, không cần kiểm tra tiếp

    i = i + 1 # Chưa tìm thấy thì cứ tăng 1 lên 1 đơn vị để tìm tiếp

Lệnh continue

Lệnh continue dùng để dừng lần lặp hiện tại và lập tức quay trở lại kiểm tra điều kiện để bắt đầu lần lặp kế tiếp. Nó giúp ta "bỏ qua" các trường hợp không mong muốn.

Lệnh continue còn được gọi là lệnh “nhảy cóc”.

Ví dụ. In dãy số từ 1 đến 10 nhưng bỏ qua các số lẻ (chỉ in số chẵn).

i = 0

while i < 10:

    i = i + 1

    if i % 2 != 0:

        continue  # Nếu là số lẻ, bỏ qua các lệnh bên dưới, quay lại đầu vòng lặp

    print(f"Số chẵn: {i}")

Lưu ý: Khi dùng continue, hãy đảm bảo lệnh tăng biến đếm (i = i + 1) nằm trước lệnh continue, nếu không bạn sẽ bị lỗi lặp vô tận.

Lệnh else

Trong Python, while có thể đi kèm với else. Khối mã trong else sẽ chạy một lần duy nhất khi điều kiện của while trở thành sai (False).

Lệnh else còn được gọi là “hành động khi hoàn tất”.

Ví dụ: Tính tổng dãy số và thông báo khi hoàn thành.

i = 1

tong = 0

while i <= 5:

    tong = tong + i

    print(f"Dang cong so {i}...")

    i = i + 1

else:

    print(f"Da cong xong! Tong day so tu 1 den 5 la: {tong}")

Lưu ý: Nếu vòng lặp bị dừng bởi lệnh break, khối lệnh else sẽ không được thực thi.

16.3 Bài tập và câu hỏi

Bài tập 16a. Nhập vào một số nguyên n. Hãy vẽ một tam giác vuông có cạnh bên trái gồm n dòng.

- Dòng 1: In 1 dấu sao (*)

- Dòng 2: In 2 dấu sao

- …

- Dòng n: In n dấu sao

Đầu vào:

Nhap vao so nguyen: 5

Đầu ra mong đợi:

*

* *

* * *

* * * *

* * * * *

Bài tập 16b. Nhập vào một số nguyên n. Hãy vẽ một tam giác vuông úp ngược có cạnh bên trái gồm n dòng.

- Dòng 1: In n dấu sao (*)

- Dòng 2: In n -1 dấu sao

- …

- Dòng n: In 1 dấu sao

Đầu vào:

Nhap vao so nguyen: 5

Đầu ra mong đợi:

* * * * *

* * * *

* * *

* * 

*

Bài tập 16c. Tìm số Fibonacci đầu tiên vượt quá một giá trị. Dãy Fibonacci bắt đầu bằng 0, 1 và số tiếp theo bằng tổng hai số trước đó (0, 1, 1, 2, 3, 5, 8...). Yêu cầu: Dùng vòng lặp while và break để tìm số Fibonacci đầu tiên lớn hơn 1000.

Đầu vào:

Nhap n: 1000

Đầu ra mong đợi:

So Fibonacci dau tien lon hon 1000 la:1597

Câu hỏi 16.1 Trong Python, vòng lặp while sẽ tiếp tục thực thi khối lệnh bên trong nó khi nào?

A. Khi biến đếm trong vòng lặp đạt đến giá trị 0

B. Vòng lặp luôn chạy ít nhất một lần bất kể điều kiện

C. Khi điều kiện logic trả về giá trị False

D. Khi điều kiện logic trả về giá trị True

16.2 Điều gì sẽ xảy ra nếu bạn quên câu lệnh cập nhật biến điều kiện (ví dụ quên i = i + 1) bên trong vòng lặp while?

A. Vòng lặp sẽ chỉ chạy đúng một lần duy nhất

B. Chương trình sẽ báo lỗi cú pháp và không chạy

C. Vòng lặp sẽ tự động dừng sau 100 lần chạy

D. Vòng lặp sẽ chạy vô tận

16.3 Lệnh nào được dùng để thoát ra khỏi vòng lặp while ngay lập tức, kể cả khi điều kiện vẫn đang đúng?

A. else

B. continue

C. break

D. pass

16. The while Loop

In the previous lesson, you learned how to use conditional statements (if statements) to control how a computer processes data based on whether a condition is true or false.

In this lesson, you will learn another control flow technique: Loops.

Looping means performing an action multiple times.

For example, if you have a list of students and need to print their names to the screen, a manual approach would look like this:

print("An")

print("Binh")

print("Chi")

# You would have to keep writing until the list ends...

However, you can achieve this more efficiently using a loop:

student_list = ["An", "Binh", "Chi", "Dung", "Em"] 

for name in student_list: 

    print(name)

16.1 What is a while Loop?

The while loop is used to repeatedly execute a block of code as long as a logical condition remains True.

Syntax:

while logical_condition: 

    # Repeated code block (must be indented 4 spaces) 

    # Statements to update the condition

Components of a while statement:

- while: A Python keyword that declares the start of a loop

- logical_condition: A comparison expression (similar to those used in if statements)

    + If the expression evaluates to True: The code block below is executed

    + If the expression evaluates to False: The loop terminates immediately, and the program moves to the lines following the loop

- Indented Code Block: All commands following the colon: that are indented equally belong to the loop

- Condition Update: Inside the loop, you must include a statement that modifies the value of the variable associated with the logical_condition. Otherwise, the condition will always stay True, resulting in an infinite loop.

Example: Let's program a calculator that takes a positive integer (n) and calculates the sum from 1 to n. For example, if n = 3, the result is 1 + 2 + 3 = 6.

n = int(input("Enter number N: ")) 

total = 0 

i = 1 

while i <= n: 

    total = total + i # Accumulate the value of i into total 

    i = i + 1         # Increment i by 1 to continue the loop 

print(f"The sum of numbers from 1 to {n} is: {total}")

16.2 Control Statements within while Loops

The break Statement

The break statement is used to exit a loop immediately, even if the while condition is still True. It is often referred to as an "emergency stop."

Example: Find the first number in a sequence divisible by another number and stop.

Task: Find the smallest number greater than 100 that is divisible by 17.

i = 101

while i < 200:

    if i % 17 == 0:

        print(f"The first number divisible by 17 is: {i}")

        break  # Found it, stop the loop immediately

    i = i + 1  # If not found, increment i to keep searching

The continue Statement

The continue statement stops the current iteration and immediately returns to the condition check to start the next iteration. It helps us "skip" unwanted cases.

Example: Print numbers from 1 to 10 but skip odd numbers (print only even numbers).

i = 0

while i < 10:

    i = i + 1

    if i % 2 != 0:

        continue  # If odd, skip the lines below and return to the start of the loop

    print(f"Even number: {i}")

Note: When using continue, ensure the counter update (i = i + 1) occurs before the continue statement to avoid an infinite loop.

The else Statement

In Python, a while loop can be followed by an else block. This block runs exactly once when the while condition becomes False. This is often called the "completion action."

Example: Calculate a sum and notify when finished.

i = 1

total = 0

while i <= 5:

    total = total + i

    print(f"Adding number {i}...")

    i = i + 1

else:

    print(f"Finished! The total sum from 1 to 5 is: {total}")

Note: If the loop is terminated by a break statement, the else block will not be executed.

16.3 Exercises and Review

Exercise 16a: Input an integer n. Draw a left-aligned right triangle consisting of n rows.

- Row 1: 1 star (*)

- Row 2: 2 stars

- …

- Row n: n stars

Exercise 16b: Input an integer n. Draw an inverted left-aligned right triangle consisting of n rows.

- Row 1: n stars (*)

- Row 2: n-1 stars

- Row n: 1 star

Exercise 16c: Find the first Fibonacci number to exceed a specific value. The Fibonacci sequence starts with 0, 1, and each subsequent number is the sum of the previous two (0, 1, 1, 2, 3, 5, 8...).

Requirement: Use a while loop and break to find the first Fibonacci number greater than 1000.

Review Questions:

16.1 In Python, when will a while loop continue to execute its internal code block?

A. When the loop counter reaches 0

B. The loop always runs at least once regardless of the condition

C. When the logical condition evaluates to False

D. When the logical condition evaluates to True

16.2 What happens if you forget to update the condition variable (e.g., forgetting i = i + 1) inside a while loop?

A. The loop will only run once

B. The program will report a syntax error and fail to run

C. The loop will automatically stop after 100 iterations

D. It creates an infinite loop

16.3 Which statement is used to exit a while loop immediately, even if the condition is still True?

A. else

B. continue

C. break

D. pass

-----

Bài sau: