Vòng lặp trong Python

Khái niệm về vòng lặp

Trong lập trình, vòng lặp là một công cụ quan trọng để lặp lại một đoạn mã nhiều lần. Thông thường, vòng lặp được sử dụng để thực hiện một số tác vụ lặp đi lặp lại cho đến khi một điều kiện cụ thể được đáp ứng hoặc khi một số lượng nhất định của các lần lặp được đạt đến.

Có hai loại vòng lặp chính trong lập trình: vòng lặp for và vòng lặp while. Vòng lặp for được sử dụng để lặp qua một chuỗi hoặc một tập hợp các phần tử, trong khi vòng lặp while được sử dụng để lặp lại một khối mã cho đến khi một điều kiện cụ thể không còn đúng nữa.

Sử dụng vòng lặp giúp tiết kiệm thời gian và tăng tính linh hoạt của chương trình, đặc biệt là trong các trường hợp lặp lại một tác vụ nhiều lần.

Vòng lặp for trong Python

Vòng lặp for trong Python được sử dụng để lặp qua một chuỗi các phần tử. Cú pháp của vòng lặp for như sau:

for item in sequence:
    # do something with item

Trong đó:

  • item là biến được sử dụng để đại diện cho từng phần tử trong chuỗi sequence.
  • sequence là chuỗi cần lặp qua, có thể là một danh sách, một chuỗi, một tuple, hoặc một iterator.

Trong quá trình lặp, vòng lặp for sẽ lặp qua từng phần tử trong chuỗi sequence, gán giá trị của phần tử đó cho biến item, và thực hiện các lệnh bên trong vòng lặp.

Ví dụ:

# Lặp qua một danh sách các số nguyên
for num in [1, 2, 3, 4, 5]:
    print(num)

# Lặp qua một chuỗi
for char in "Hello world!":
    print(char)

# Lặp qua một tuple
for item in (1, 2, 3):
    print(item)

Ngoài ra, trong vòng lặp for có thể sử dụng câu lệnh break để thoát khỏi vòng lặp và câu lệnh continue để bỏ qua các phần tử trong vòng lặp. breakcontinue là hai câu lệnh điều khiển luồng trong Python được sử dụng để kiểm soát và thay đổi quá trình lặp. Cả hai đều giúp tối ưu hóa việc lặp qua các phần tử trong danh sách hoặc chuỗi, giúp người lập trình viết code ngắn gọn và hiệu quả hơn.

Câu lệnh break dùng để kết thúc vòng lặp ngay lập tức nếu điều kiện được chỉ định được đáp ứng. Ví dụ dưới đây minh họa việc sử dụng câu lệnh break để dừng vòng lặp khi số phần tử lớn hơn 5:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for number in numbers:
    if number > 5:
        break
    print(number)

Câu lệnh continue được sử dụng để bỏ qua các phần tử không cần thiết trong vòng lặp và tiếp tục lặp với phần tử tiếp theo. Ví dụ dưới đây sử dụng câu lệnh continue để bỏ qua các số lẻ và chỉ in ra các số chẵn trong danh sách:

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

for number in numbers:
    if number % 2 != 0:
        continue
    print(number)

Như vậy, câu lệnh breakcontinue là hai công cụ hữu ích giúp người lập trình kiểm soát quá trình lặp một cách hiệu quả và đơn giản hóa việc viết code.

Vòng lặp for với range

Sử dụng range để tạo một dãy số và lặp qua nó. Vòng lặp for với range là một cách phổ biến để tạo một dãy số và lặp qua nó trong Python.

for i in range(start, stop, step):
    # Thực hiện công việc với biến "i"

Trong đó:

  • start là giá trị bắt đầu của dãy số (bao gồm).
  • stop là giá trị kết thúc của dãy số (không bao gồm).
  • step là khoảng cách giữa các giá trị trong dãy số (mặc định là 1 nếu không được chỉ định).

Ví dụ:

# Lặp qua dãy từ 0 đến 4:
for i in range(5):
    print(i)
# Lặp qua một dãy số từ 1 đến 10 và in ra các số chẵn:
for i in range(2, 11, 2):
    print(i)
# Lặp qua một dãy số từ 10 đến 1 (ngược lại) và in ra các số:
for i in range(10, 0, -1):
    print(i)

Vòng lặp while trong Python

Trong Python, vòng lặp while là một cấu trúc lặp không xác định trước số lần lặp. Cấu trúc chung của vòng lặp while như sau:

while điều kiện:
    # Thực hiện một số lệnh

Trong đó, điều kiện là một biểu thức logic trả về giá trị True hoặc False. Trong mỗi lần lặp, nếu điều kiện là True, các lệnh bên trong khối while sẽ được thực thi. Sau đó, điều kiện được kiểm tra lại và nếu vẫn là True, khối lệnh sẽ được thực thi một lần nữa. Quá trình này sẽ tiếp tục cho đến khi điều kiện trở thành False.

Ví dụ:

i = 1
while i <= 10:
    print(i)
    i += 1

Đoạn code trên sẽ in ra các số từ 1 đến 10, vì điều kiện i <= 10 sẽ là True cho đến khi i bằng 11, khi đó điều kiện trở thành False và vòng lặp sẽ kết thúc.

Chúng ta cũng có thể sử dụng các lệnh breakcontinue trong vòng lặp while tương tự như trong vòng lặp for.

# Hiển thị các số chẵn nhỏ hơn 10 bằng vòng lặp while
i = 0
while i < 10:
    if i % 2 != 0:  # Bỏ qua số lẻ
        i += 1
        continue
    print(i)
    if i == 6:  # Thoát khỏi vòng lặp nếu gặp số 6
        break
    i += 1

Trong ví dụ này, chúng ta sử dụng vòng lặp while để hiển thị tất cả các số chẵn nhỏ hơn 10. Chúng ta sử dụng continue để bỏ qua các số lẻ và sử dụng break để thoát khỏi vòng lặp nếu gặp số 6.

Trong Python, không có vòng lặp do...while như trong một số ngôn ngữ khác như C++, Java. Tuy nhiên, bạn có thể mô phỏng vòng lặp do...while bằng cách sử dụng vòng lặp while và kiểm tra điều kiện trước khi bắt đầu vòng lặp. Ví dụ:

while True:
    # thực hiện một số thao tác ở đây
    
    # Kiểm tra điều kiện để kết thúc vòng lặp
    choice = input("Bạn có muốn tiếp tục không? (Y/N): ")
    if choice != "Y" and choice != "y":
        break

Trong ví dụ trên, chúng ta sử dụng vòng lặp while với điều kiện luôn đúng (True). Sau đó, chúng ta thực hiện một số thao tác và kiểm tra xem người dùng có muốn tiếp tục hay không bằng cách yêu cầu người dùng nhập “Y” hoặc “N”. Nếu người dùng không chọn “Y” hoặc “y”, vòng lặp sẽ kết thúc bằng cách sử dụng câu lệnh break.

Hàm map(), filter() và reduce() trong Python

Ngoài ra, Python cũng hỗ trợ một số hàm xử lý các tình huống lặp lại phổ biến như map(), filter()reduce() không cần sử dụng các vòng lặp truyền thống.

Ví dụ về cách sử dụng các hàm này như sau:

Hàm map(): sử dụng để áp dụng một hàm vào mỗi phần tử của một iterable (ví dụ như list, tuple) và trả về một iterator với các kết quả được áp dụng hàm.

# ví dụ: áp dụng hàm square vào mỗi phần tử trong list và lưu vào một list mới
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda x: x**2, numbers))
print(squares)  # [1, 4, 9, 16, 25]

Hàm filter(): sử dụng để lọc các phần tử trong iterable dựa trên một điều kiện (là một hàm trả về giá trị boolean) và trả về một iterator với các phần tử thoả điều kiện.

# ví dụ: lọc các số lẻ từ một list và lưu vào một list mới
numbers = [1, 2, 3, 4, 5]
odds = list(filter(lambda x: x % 2 == 1, numbers))
print(odds)  # [1, 3, 5]

ví dụ: lọc các số lẻ từ một list và lưu vào một list mới

Hàm reduce(): sử dụng để áp dụng một hàm liên tiếp vào các phần tử của một iterable và trả về kết quả cuối cùng.

# ví dụ: tính tổng các phần tử trong một list
from functools import reduce
numbers = [1, 2, 3, 4, 5]
total = reduce(lambda x, y: x + y, numbers)
print(total)  # 15

Lưu ý rằng trong Python 3, hàm reduce() đã được chuyển từ module built-in sang module functools, vì vậy cần import từ functools trước khi sử dụng.

Điều này có nghĩa là trước khi sử dụng hàm reduce(), bạn cần import nó từ functools.

Ví dụ, nếu bạn muốn tính tổng của một danh sách các số nguyên bằng cách sử dụng hàm reduce(), bạn có thể sử dụng mã sau đây:

from functools import reduce

numbers = [1, 2, 3, 4, 5]
sum = reduce(lambda x, y: x + y, numbers)
print(sum)

Ở đây, hàm reduce() sử dụng một hàm lambda để thực hiện phép cộng hai số liên tiếp trong danh sách. Đầu tiên, nó lấy hai số đầu tiên trong danh sách, tính tổng của chúng và trả về kết quả. Sau đó, nó lấy kết quả đó và số tiếp theo trong danh sách, tính tổng của chúng và trả về kết quả. Quá trình này được lặp lại cho đến khi nó tính được tổng của tất cả các số trong danh sách.

Tuy nhiên, nếu bạn không import hàm reduce() từ functools như sau:

sum = reduce(lambda x, y: x + y, numbers)

Bạn sẽ nhận được một lỗi tương tự như sau:

NameError: name 'reduce' is not defined

Do đó, trong Python 3, trước khi sử dụng hàm reduce(), bạn cần import nó từ functools như sau:

from functools import reduce

sum = reduce(lambda x, y: x + y, numbers)

Kết luận

Vòng lặp là một công cụ quan trọng trong lập trình Python giúp cho chương trình có thể lặp lại một tác vụ nào đó một số lần hoặc cho đến khi một điều kiện được đáp ứng. Các vòng lặp giúp giảm thiểu mã lệnh cần viết, giúp cho chương trình của bạn trở nên ngắn gọn, dễ hiểu và dễ bảo trì hơn.

Với việc sử dụng vòng lặp, bạn có thể thực hiện một số tác vụ như:

  • Thực hiện một tác vụ nào đó cho mỗi phần tử trong một danh sách hoặc một chuỗi.
  • Thực hiện một tác vụ cho đến khi một điều kiện được đáp ứng.
  • Thực hiện một tác vụ nào đó cho mỗi số nguyên từ một giá trị bắt đầu đến một giá trị kết thúc.

Với các vòng lặp như for, while và các hàm map(), filter() và reduce(), bạn có thể dễ dàng thực hiện các tác vụ lặp lại một cách nhanh chóng và dễ dàng.

Bài tập

Dưới đây là 20 bài tập cơ bản về vòng lặp trong Python để bạn rèn luyện kỹ năng lập trình vòng lặp:

  1. Viết một chương trình để in ra các số từ 1 đến 10 bằng vòng lặp for.
  2. Viết một chương trình để tính tổng các số từ 1 đến n (n là một số nguyên dương được người dùng nhập vào) bằng vòng lặp while.
  3. Viết chương trình để in ra bảng cửu chương (từ 1 đến 10) sử dụng vòng lặp for lồng nhau.
  4. Viết chương trình để tính giai thừa của một số nguyên dương n bằng vòng lặp while.
  5. Viết chương trình để in ra các số lẻ từ 1 đến 20 bằng vòng lặp for.
  6. Viết chương trình để in ra các số chẵn từ 1 đến 20 bằng vòng lặp while.
  7. Viết chương trình để tính tổng của các số lẻ từ 1 đến 100 bằng vòng lặp for.
  8. Viết chương trình để tính tổng của các số chia hết cho 3 từ 1 đến 100 bằng vòng lặp while.
  9. Viết chương trình để đảo ngược một chuỗi sử dụng vòng lặp for.
  10. Viết chương trình để đếm số lượng chữ cái ‘a’ trong một chuỗi.
  11. Viết chương trình để tính tổng của các số nguyên trong một danh sách sử dụng vòng lặp for.
  12. Viết chương trình để kiểm tra xem một số có phải là số nguyên tố hay không bằng cách sử dụng vòng lặp for.
  13. Viết chương trình để tìm giá trị lớn nhất trong một danh sách số nguyên sử dụng vòng lặp while.
  14. Viết chương trình để tính trung bình cộng của một danh sách số thực sử dụng vòng lặp for.
  15. Viết chương trình để tìm số nhỏ nhất trong một danh sách số nguyên sử dụng vòng lặp while.
  16. Viết chương trình để tìm ước chung lớn nhất (GCD) của hai số nguyên sử dụng thuật toán Euclid và vòng lặp.
  17. Viết chương trình để in ra dãy Fibonacci với n số đầu tiên sử dụng vòng lặp for hoặc while.
  18. Viết chương trình để kiểm tra xem một chuỗi có phải là chuỗi palindrome hay không bằng vòng lặp.
  19. Viết chương trình để tính tổng của các số trong một danh sách, bỏ qua các số âm sử dụng vòng lặp for.
  20. Viết chương trình để tạo một hình tam giác vuông bằng các ký tự ‘*’ sử dụng vòng lặp for.

Hy vọng rằng những bài tập này sẽ giúp bạn nắm vững khả năng sử dụng vòng lặp và làm quen với việc giải quyết các vấn đề thực tế trong Python.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *