Buổi học 9 (25/07/2025): Vòng lặp trong Python - Nguyên tắc tự động hóa cốt lõi
Giới thiệu
Trong các buổi học trước, chúng ta đã trang bị cho chương trình khả năng lưu trữ dữ liệu (biến), xử lý thông tin (toán tử), và ra quyết định (cấu trúc if-else). Tuy nhiên, sức mạnh thực sự của máy tính nằm ở khả năng thực hiện hàng ngàn, hàng triệu thao tác một cách không mệt mỏi.
Hãy xem xét một bài toán: yêu cầu người dùng nhập vào 100 con số và tính tổng của chúng. Với kiến thức hiện tại, bạn sẽ phải viết 100 dòng input() và một biểu thức cộng 100 biến. Cách làm này không chỉ tốn công mà còn không thể mở rộng.
Trong lập trình, có một nguyên tắc quan trọng là DRY (Don't Repeat Yourself - Đừng lặp lại chính mình). Vòng lặp (Loop) chính là công cụ mạnh mẽ nhất để tuân thủ nguyên tắc này. Nó cho phép chúng ta thực thi một khối lệnh lặp đi lặp lại, tự động hóa các tác vụ nhàm chán và xây dựng những chương trình có tính linh hoạt cao.
Yêu cầu chung:
- Với mỗi bài tập có (Mẫu), hãy tự mình chạy lại đoạn mã trên https://www.online-python.com/.
- Sau khi chạy thành công, chụp lại màn hình kết quả, cùng đoạn code và dán vào file báo cáo theo link sau: https://docs.google.com/spreadsheets/d/15LIvltRsEAtQbdt9eYPdyG9-Kv_j0i1i3pfO0Iovnow/edit?usp=sharing (chú ý hãy gửi yêu cầu quyền chỉnh sửa cho chú)
I. Vòng lặp for - Lặp với số l ần xác định
Dẫn dắt & Tư duy
Hãy hình dung một người đưa thư có nhiệm vụ phát báo cho một dãy phố được đánh số từ nhà 1 đến nhà 50. Lộ trình của họ đã được xác định trước một cách rõ ràng. Vòng lặp for trong Python hoạt động với triết lý tương tự: nó được thiết kế để duyệt qua một chuỗi các phần tử đã biết trước. Bạn sử dụng for khi bạn biết chính xác điểm bắt đầu, điểm kết thúc và số lần lặp cần thực hiện.
Cú pháp:
for iterator_variable in sequence:
# Khối lệnh lặp lại
# Các lệnh này phải được thụt vào đầu dòng (indentation)
Công cụ chính: Hàm range()
Để tạo ra một dãy số tuần tự cho vòng lặp for, chúng ta thường sử dụng hàm range().
range(stop): Tạo một dãy số từ 0 đếnstop-1.- Ví dụ:
range(5)sẽ tạo ra dãy số: 0, 1, 2, 3, 4.
- Ví dụ:
range(start, stop): Tạo một dãy số từstartđếnstop-1.- Ví dụ:
range(1, 6)sẽ tạo ra dãy số: 1, 2, 3, 4, 5.
- Ví dụ:
range(start, stop, step): Tạo một dãy số từstartđếnstop-1, với mỗi bước nhảy làstep.- Ví dụ:
range(2, 11, 2)sẽ tạo ra dãy số: 2, 4, 6, 8, 10.
- Ví dụ:
Bài tập thực hành cho vòng lặp for
(1.1) (Mẫu) In ra bảng cửu chương
Phân tích: Bài toán yêu cầu lặp lại phép tính 7 * i với i chạy từ 1 đến 10. Đây là một tác vụ có số lần lặp xác định, vì vậy for là lựa chọn lý tưởng.
Giải pháp mẫu:
multiplication_table_of = 7
print(f"--- Bảng cửu chương {multiplication_table_of} ---")
for i in range(1, 11):
result = multiplication_table_of * i
# Sử dụng f-string để định dạng chuỗi đầu ra một cách rõ ràng
print(f"{multiplication_table_of} x {i} = {result}")
(1.2) (Thực hành) Tính giai thừa
Yêu cầu: Yêu cầu người dùng nhập một số nguyên dương n. Sau đó, tính và in ra n! (n giai thừa). Ví dụ: 5! = 1 * 2 * 3 * 4 * 5 = 120.
Gợi ý:
- Tương tự bài tính tổng, bạn cần một biến để tích lũy kết quả. Với phép nhân, giá trị khởi tạo nên là
1. - Vòng lặp
fornên chạy từ 1 đếnn.
(1.3) (Thực hành) In các số chẵn trong một khoảng
Yêu cầu: In ra tất cả các số chẵn trong khoảng từ 1 đến 50.
Gợi ý:
- Cách 1 (Hiệu quả): Sử dụng tham số
stepcủa hàmrange().range(2, 51, 2)sẽ tạo ra dãy số bắt đầu từ 2, kết thúc trước 51, và mỗi bước nhảy cách nhau 2 đơn vị. - Cách 2 (Luyện tư duy
iftrongfor): Lặp qua tất cả các số từ 1 đến 50. Bên trong vòng lặp, sử dụng cấu trúcifvà phép toán chia lấy dư (%) để kiểm tra xem số hiện tại có phải là số chẵn không.
Minh họa luồng đi cho Cách 2:
Giải thích luồng đi:
- (1) Vòng lặp
forbắt đầu. - (2) Với mỗi số (
number) được lấy ra, chương trình kiểm tra điều kiện chia hết cho 2. - (3) Nếu điều kiện đúng, số đó được in ra. Dù đúng hay sai, luồng chương trình đều quay trở lại đầu vòng lặp để lấy số tiếp theo, cho đến khi duyệt hết dãy số thì vòng lặp kết thúc.
(1.4) (Thực hành) Đếm nguyên âm trong một chuỗi
Yêu cầu: Yêu cầu người dùng nhập vào một câu bất kỳ. Dùng vòng lặp for để duyệt qua từng ký tự của câu và đếm xem có bao nhiêu nguyên âm (a, e, i, o, u). Không phân biệt chữ hoa, chữ thường.
Gợi ý:
- Khởi tạo một biến
vowel_count = 0. - Dùng
for char in user_input:để duyệt qua từng ký tự. - Để không phân biệt hoa/thường, hãy chuyển ký tự về dạng chữ thường trước khi so sánh:
char.lower(). - Dùng
ifđể kiểm tra xemchar.lower()có nằm trong chuỗi"aeiou"hay không.
II. Vòng lặp while - Lặp dựa trên điều kiện
Dẫn dắt & Tư duy
Bây giờ, hãy hình dung một người lính canh gác một pháo đài. Nhiệm vụ của anh ta không phải là "đi tuần 10 vòng rồi nghỉ", mà là "tiếp tục đi tuần cho đến khi có tín hiệu báo động". Anh ta không thể biết trước khi nào tín hiệu sẽ vang lên. Vòng lặp while hoạt động dựa trên triết lý này. Nó chỉ quan tâm đến một điều kiện: "Chừng nào điều kiện này còn đúng, thì còn tiếp tục thực thi khối lệnh".
Cú pháp:
while condition: # Chừng nào điều kiện (condition) còn đúng
# Khối lệnh lặp lại
# Bắt buộc phải có một lệnh nào đó trong khối này
# có khả năng làm cho `condition` trở thành sai (False)
Cảnh báo: Nếu không có cách nào để condition trở thành False, vòng lặp sẽ chạy mãi mãi, gây ra lỗi lặp vô tận (infinite loop).