--------------- <> -----------------
--- 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 (17) - Lệnh lặp for

 Bài trước: Python (16) - Lệnh lặp while

-----

17. Lệnh lặp for

Trong bài học trước, bạn đã biết cách dùng lệnh while để lặp khi chưa biết rõ số lần. Tuy nhiên, khi bạn đã có một danh sách (List), một chuỗi ký tự (String) hoặc một dãy số xác định, lệnh for sẽ giúp mã nguồn của bạn ngắn gọn và dễ đọc hơn rất nhiều.

17.1 Lệnh lặp for là gì?

Lệnh lặp for được dùng để duyệt qua các phần tử của một tập hợp (như List, Tuple, Dictionary, Set, hoặc String).

Lệnh lặp với for giống như việc bạn duyệt qua từng món đồ trong một chiếc hộp và thực hiện một hành động nào đó với từng món đồ.

Cú pháp:

for biến_tạm in tập_hợp: 

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

Giải thích các thành phần:

- for: Từ khóa bắt đầu vòng lặp

- biến_tạm: Là tên biến do bạn đặt, nó sẽ đại diện cho từng phần tử bên trong tập hợp ở mỗi lần lặp

- tập_hợp: Danh sách hoặc dãy dữ liệu mà bạn muốn duyệt qua

Ví dụ lặp qua một chuỗi ký tự:

for x in "PYTHON":

    print(x) # In ra từng chữ cái P, Y, T, H, O, N trên từng dòng

17.2 Hàm range()

Để lặp với một số lần cụ thể (ví dụ lặp 10 lần), Python cung cấp hàm range(). Hàm range() sẽ tạo ra một dãy số.

Ví dụ:

- range(6): Tạo dãy từ 0 đến 5 (không bao gồm 6)

- range(2, 6): Bắt đầu từ 2 và dừng trước 6 (2, 3, 4, 5)

- range(2, 30, 3): Bắt đầu từ 2, dừng trước 30, mỗi lần tăng 3 đơn vị (2, 5, 8, 11...)

Đoạn mã ví dụ:

for i in range(3):

    print("Chào bạn!") # In 3 lần dòng chữ Chào bạn

17.3 Các xử lý đặc biệt trong for

Tương tự như while, lệnh for cũng có các công cụ điều khiển:

Lệnh break

Lệnh break: Thoát khỏi vòng lặp ngay lập tức khi tìm thấy thứ bạn cần

Ví dụ: Tìm trái "banana" trong danh sách rồi dừng lại. Bạn hãy tự gõ từng dòng mã sau (không chép/dán):

# Danh sách các loại trái cây trong giỏ 

gio_trai_cay = ["apple", "orange", "banana", "cherry", "mango"] 

print("Bắt đầu tìm kiếm trong giỏ...") 

for x in gio_trai_cay: 

if x == "banana": 

print("Đã tìm thấy banana! Dừng tìm kiếm tại đây.") 

break # Lệnh dừng khẩn cấp, thoát khỏi vòng lặp ngay lập tức 

print(f"Kiểm tra: {x}... Không phải trái tôi cần.") 

print("Chương trình kết thúc.")

Lệnh continue

Lệnh continue: Bỏ qua phần tử hiện tại và nhảy sang phần tử kế tiếp.

Ví dụ: In danh sách trái cây nhưng không in trái "banana". Bạn hãy tự gõ từng dòng mã sau (không chép/dán):

# Danh sách các loại trái cây 

gio_trai_cay = ["apple", "orange", "banana", "cherry", "mango"] 

print("--- DANH SÁCH TRÁI CÂY HÔM NAY ---") 

for x in gio_trai_cay: 

if x == "banana": 

# Gặp banana thì bỏ qua, không thực hiện lệnh print bên dưới 

continue 

# Lệnh này chỉ chạy nếu không gặp lệnh continue 

print(f"Có bán: {x}") 

print("--- KẾT THÚC DANH SÁCH ---")

Lệnh else

Lệnh else: Thực hiện một hành động sau khi vòng lặp hoàn thành tất cả các phần tử.

Lưu ý: Nếu vòng lặp bị dừng bởi break, khối else sẽ không chạy.

Ví dụ: Kiểm tra dữ liệu "sạch" trong danh sách

Tình huống: Bạn có một danh sách các con số là kết quả đo nhiệt độ của một thí nghiệm. Bạn cần kiểm tra xem có con số nào "bất thường" (ví dụ nhiệt độ âm) hay không.

- Nếu phát hiện số âm: Dừng lại và báo động ngay (break)

- Nếu đã kiểm tra toàn bộ danh sách mà tất cả đều hợp lệ: Thông báo thí nghiệm an toàn (else)

[Trường hợp 1: Dãy số "sạch" (Vòng lặp chạy hết)]

Bạn hãy tự gõ từng dòng mã sau (không chép/dán):

# Danh sách nhiệt độ đo được (đều là số dương)

nhiet_do_list = [25, 28, 30, 32, 29]


print("--- BẮT ĐẦU KIỂM TRA DỮ LIỆU ---")

for t in nhiet_do_list:

    if t < 0:

        print(f"Phát hiện nhiệt độ lỗi: {t}. Dừng hệ thống!")

        break

    print(f"Nhiệt độ {t}°C: Hợp lệ.")

else:

    # Lệnh này chạy vì vòng lặp ĐÃ DUYỆT HẾT danh sách mà không gặp break

    print("--- KẾT QUẢ: Tất cả dữ liệu đều an toàn. Thí nghiệm thành công! ---")

print("Hoàn tất quy trình.")

[Trường hợp 2: Dãy số có lỗi (Gặp lệnh break)]

# Danh sách có một số âm bất thường

nhiet_do_list = [25, -5, 30, 32]


for t in nhiet_do_list:

    if t < 0:

        print(f"BÁO ĐỘNG: Phát hiện nhiệt độ âm ({t}°C). Ngắt quy trình ngay!")

        break

    print(f"Nhiệt độ {t}°C: Hợp lệ.")

else:

    # Lệnh này sẽ KHÔNG CHẠY vì vòng lặp đã bị ngắt bởi break ở số -5

    print("Tất cả dữ liệu đều an toàn.")


print("Đã gửi báo cáo lỗi kỹ thuật.")

Vòng lặp lồng nhau

Vòng lặp lồng nhau (Nested Loops): Một vòng lặp for nằm trong một vòng lặp for khác.

Ứng dụng: Dùng để vẽ hình hoặc xử lý bảng dữ liệu.

Ví dụ: Vẽ hình chữ nhật (4 hàng, 5 cột)

Hãy tưởng tượng bạn cần vẽ một hình chữ nhật có 4 hàng, mỗi hàng có 5 dấu sao. Thay vì viết 4 lệnh print("*****"), chúng ta sẽ dùng vòng lặp lồng nhau. Bạn hãy tự gõ từng dòng mã sau (không chép/dán):

# Vòng lặp ngoài: Điều khiển số hàng (4 hàng)

for hang in range(1, 5):

    # Vòng lặp trong: Điều khiển số cột (5 dấu sao trên mỗi hàng)

    for cot in range(1, 6):

        print("*", end=" ") # end=" " giúp in các dấu sao sát nhau trên cùng 1 hàng

        

    # Sau khi in xong 1 hàng (hết vòng lặp trong), ta cần xuống dòng

    print()

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

Bài tập

Bài tập 17a. Tính tổng tiền của đơn hàng. Giả sử bạn có một danh sách giá tiền các món đồ người dùng đã chọn mua: gio_hang = [150, 200, 350, 50]. Yêu cầu: Dùng lệnh lặp for để tính tổng số tiền của đơn hàng này và in ra kết quả.

Đầu vào:

gio_hang = [150, 200, 350, 50]

Đầu ra mong đợi:

tong_tien: 750

Bài tập 17b. Sử dụng lệnh lặp for lồng nhau để in toàn bộ bảng cửu chương từ 2 đến 9.

Đầu vào:

# không có đầu vào

Đầu ra mong đợi:

# Bảng cửu chương từ 2 đến 9

Bài tập 17c. Cho người dùng nhập vào số n. Sử dụng vòng lặp for và hàm range() để vẽ tam giác vuông cân bằng dấu sao (*).

Đầu vào:

Chieu cao cua tam giac n: 5

Đầu ra mong đợi:

# tam giác vuông cân bằng dấu *

Câu hỏi

17.1 Vòng lặp for trong Python khác gì so với vòng lặp while? 

A. for chỉ dùng để lặp vô tận

B. for dùng để duyệt qua các phần tử của tập hợp, while lặp dựa trên điều kiện

C. for không bao giờ sử dụng được lệnh break

D. for yêu cầu phải có biến đếm tự tăng thủ công (như i += 1)

17.2 Hàm range(1, 5) sẽ tạo ra dãy số nào? 

A. 1, 2, 3, 4, 5 

B. 0, 1, 2, 3, 4, 5 

C. 1, 2, 3, 4 

D. 5, 4, 3, 2, 1

17.3 Lệnh pass được dùng làm gì trong vòng lặp for? 

A. Để kết thúc vòng lặp

B. Để bỏ qua phần tử tiếp theo

C. Để giữ chỗ trống cho vòng lặp chưa có nội dung, tránh bị báo lỗi cú pháp

D. Để quay lại từ đầu vòng lặp\

17. The for Loop

In the previous lesson, you learned how to use the while loop to repeat actions when the exact number of iterations is unknown. However, when you have a List, a String, or a defined sequence, the for loop makes your source code much more concise and readable.

17.1 What is a for Loop?

A for loop is used to iterate over the elements of a collection (such as a List, Tuple, Dictionary, Set, or String). Think of a for loop as going through every item in a box and performing a specific action with each item.

Syntax:

for item_variable in collection: 

    # Repeated code block (must be indented 4 spaces)

Explanation of components:

- for: The keyword that declares the start of the loop

- item_variable: A name you choose to represent each individual element inside the collection during each iteration

- collection: The list or sequence of data that you want to traverse.

Example of iterating through a string:

for x in "PYTHON":

   print(x) # Prints each letter P, Y, T, H, O, N on a new line

17.2 The range() Function

To loop a specific number of times (e.g., 10 times), Python provides the range() function, which generates a sequence of numbers.

Examples:

- range(6): Generates a sequence from 0 to 5 (excludes 6)

- range(2, 6): Starts at 2 and stops before 6 (2, 3, 4, 5)

- range(2, 30, 3): Starts at 2, stops before 30, incrementing by 3 each time (2, 5, 8, 11...)

Example code

for i in range(3):

    print("Hello!") # Prints "Hello!" 3 times

17.3 Special Control Statements in for

Just like while, the for loop includes control tools to manage execution flow.

The break Statement

The break statement exits the loop immediately when you find what you need. It acts as an "emergency exit."

Example: Find the fruit "banana" in a list and stop. Try typing this code manually:

fruits = ["apple", "orange", "banana", "cherry", "mango"] 

print("Starting search in the basket...") 

for x in fruits: 

    if x == "banana": 

        print("Found banana! Stopping search here.") 

        break # Exit the loop immediately 

    print(f"Checking: {x}... Not what I need.") 

print("Program finished.")

The continue Statement

The continue statement skips the current iteration and jumps to the next element in the sequence.

Example: Print the fruit list but exclude "banana". Try typing this code manually:

fruits = ["apple", "orange", "banana", "cherry", "mango"] 

print("--- TODAY'S FRUIT LIST ---") 

for x in fruits: 

    if x == "banana": 

        continue # Skip the lines below and move to the next item

    print(f"Available: {x}") 

print("--- END OF LIST ---")

The else Statement

The else block executes once after the loop has successfully finished iterating through all elements. Note: If the loop is terminated by a break, the else block will not execute.

Example: Verifying "Clean" data in a list Scenario: You have a list of temperatures from an experiment. You need to check for "anomalies" (e.g., negative temperatures).

[Case 1: "Clean" sequence (Loop completes)]

temperatures = [25, 28, 30, 32, 29]

print("--- STARTING DATA CHECK ---")

for t in temperatures:

    if t < 0:

        print(f"Error detected: {t}. Shutting down system!")

        break

    print(f"Temperature {t}°C: Valid.")

else:

    # This runs because the loop TRAVERSED THE WHOLE list without hitting 'break'

    print("--- RESULT: All data is safe. Experiment successful! ---")

print("Process complete.")


[Case 2: Sequence with errors (Hit break)]

temperatures = [25, -5, 30, 32]

for t in temperatures:

    if t < 0:

        print(f"ALARM: Negative temperature detected ({t}°C). Aborting immediately!")

        break

    print(f"Temperature {t}°C: Valid.")

else:

    # This will NOT RUN because the loop was interrupted by 'break' at -5

    print("All data is safe.")

print("Technical error report sent.")


Nested Loops


A nested loop is a for loop inside another for loop. This is commonly used for drawing shapes or processing table data.


Example: Drawing a Rectangle (4 rows, 5 columns) Try typing this code manually:


# Outer loop: Controls the number of rows (4 rows)

for row in range(1, 5):

    # Inner loop: Controls the number of columns (5 stars per row)

    for col in range(1, 6):

        print("*", end=" ") # end=" " keeps stars on the same line

        

    # After the inner loop finishes a row, move to the next line

    print()


17.4 Exercises and Questions


Exercise 17a. Calculate the total order price. Given a list of prices: cart = [150, 200, 350, 50]. Requirement: Use a for loop to calculate the total sum and print the result.


Expected Output: 


total_price: 750


Exercise 17b. Use nested for loops to print the entire multiplication table from 2 to 9.


Exercise 17c. Take input n from the user. Use a for loop and range() to draw a right-aligned right triangle using stars (*).


Review Questions:


17.1 How does a for loop differ from a while loop in Python? 


A. for is only used for infinite loops


B. for is used to iterate over elements of a collection; while loops based on a condition


C. for can never use the break statement


D. for requires a manual counter increment (like i += 1).


17.2 What sequence does range(1, 5) generate? 


A. 1, 2, 3, 4, 5 


B. 0, 1, 2, 3, 4, 5 


C. 1, 2, 3, 4 


D. 5, 4, 3, 2, 1


17.3 What is the break statement used for in a for loop?


A. To terminate the loop 


B. To skip the next element 


C. To act as a placeholder for an empty loop to avoid syntax errors 


D. To restart the loop from the beginning

-----

Bài sau: