Vòng lặp trong Python

Hôm nay chúng ta sẽ tìm hiểu cách sử dụng vòng lặp trong Python.

Trong quá trình phát triển ứng dụng sẽ có những việc (logic cụ thể nào đó) mà chúng ta muốn lặp lại một số lần nhất định, lúc này ta sẽ sử dụng vòng lặp để xử lý. Để hiểu rõ hơn ta sẽ xét một vài ví dụ cụ thể sau:

for … in

Vấn đề 1: Hãy in ra màn hình các phần tử trong danh sách a = [1, 0.2, 'abc'].

Cú pháp của vòng lặp for:

for item in items:
    # The code you want to repeat

Cách hoạt động: item đại diện cho một phần tử trong danh sách items trong quá trình chạy vòng lặp, với mỗi item phần code phía dưới for sẽ được thực thi. Vòng lặp for sẽ dừng lại khi nó duyệt đến phần tử cuối cùng hoặc bị can thiệp bởi các câu lệnh khác (ta sẽ tìm hiểu sau).

Trở lại vấn đề 1, hành động chúng ta muốn lặp lại ở đây là: Với mỗi phần tử được xét đến hãy in nó ra màn hình.

def main():
    a = [1, 0.2, 'abc']
    for x in a:
        print(x)

main()

Output

1
0.2
abc

while và for … in range

Vấn đề 2: Hãy in ra màn hình các số tự nhiên chẵn nhỏ hơn 10.

Trước tiên ta hãy tìm hiểu một chút về vòng lặp while. Vòng lặp while có cú pháp như sau:

while(condition)
    # The code you want to repeat

Cách hoạt động: Khi condition được thỏa mãn (true) thì phần code phía dưới while sẽ được thực thi. Vòng lặp while sẽ dừng lại khi condition bị vi phạm (false) hoặc bị can thiệp bởi một số câu lệnh khác (ta sẽ tìm hiểu sau).

Trở lại vấn đề 2, hành động chúng ta muốn lặp lại ở đây là: Kiểm tra một con số nhỏ hơn 10 xem nó có là số chẵn hay không, nếu nó là số chẵn thì in con số đó ra màn hình.

Cách 1: Sử dụng vòng lặp while

def main():
    i = 0
    while(i < 10):
        if(i % 2 == 0):
            print(i)
        i += 1
        
main()

Output

0
2
4
6
8

Cách 2: Sử dụng for ... in range

def main():
    for i in range(10):
        if(i % 2 == 0):
            print(i)
        
main()

Output

0
2
4
6
8

Ta tìm hiểu một chút về hàm range(): Hàm range() có 3 tham số chúng ta cần lưu ý là start, stopstep. Cụ thể hàm range(1, 5, 2) thông báo với chương trình: “Hãy trả cho tôi một dãy các số bắt đầu từ 1, kết thúc là một số bé hơn 5 và số sau sẽ lớn hơn số trước 2 đơn vị”, ta sẽ nhận được kết quả là 1, 3.

Chú ý: Giá trị mặc định của startstep lần lượt là 0 và 1.

Trở lại với vấn đề trên, ở cách 2, chương trình sẽ lần lượt xét từng con số trong dãy số từ 0 đến 9 (được tạo ra từ hàm range(10)), nếu con số đó là chẵn chương trình sẽ in ra màn hình.

Quiz: Các bạn hãy viết một hàm sử dụng hàm range() với đầy đủ các tham số start, stopstep để giải quyết vấn đề 2.

for và break

Không phải lúc nào chúng ta cũng phải duyệt hết các phần tử trong một danh sách cho trước, để dừng vòng lặp lại khi thoả một điều kiện cụ thể nào đó Python cung cấp cho ta câu lệnh (statement) break.

Vấn đề 3: Cho trước một danh sách animals = ['cat', 'dog', 'tiger', 'lion', 'elephant]. Hãy in tên các con vật đứng trước tiger.

Sử dụng forbreak: Ta thông báo với chương trình rằng với mỗi con vật (animal) trong (in) danh sách animals hãy in cho tôi tên của chúng tuy nhiên hãy dừng vòng lặp lại (break) nếu tên con vật đang xét đến là tiger.

def main():
    animals = ['cat', 'dog', 'tiger', 'lion', 'elephant']
    for animal in animals:
        if(animal == 'tiger'):
            break;
        print(animal)
        
main()

Output

cat
dog

Việc đặt break đúng chỗ rất quan trọng, hãy thử suy nghĩ về quiz sau:

def main():
    animals = ['cat', 'dog', 'tiger', 'lion', 'elephant']
    for animal in animals:
        print(animal)
        if(animal == 'tiger'):
            break;
        
main()

Quiz: Đoạn code trên có giải quyết được vấn đề 3 không? Nếu không thì kết quả cụ thể trên màn hình là gì?

for và continue

Ngoài câu lệnh break, Python còn cung cấp cho ta câu lệnh continue để tác động vào vòng lặp. Ta sẽ xét một ví dụ để hiểu rõ hơn:

Vấn đề 4: Cho trước một danh sách animals = ['cat', 'dog', 'tiger', 'lion', 'elephant]. Hãy in tên tất cả các con vật ngoại trừ tiger.

def main():
    animals = ['cat', 'dog', 'tiger', 'lion', 'elephant']
    for animal in animals:
        if(animal == 'tiger'):
            continue
        print(animal)
        
main()

Output

cat
dog
lion
elephant

Ở đoạn code trên, khi chương trình nhận thấy tên của con vật đang xét đến là tiger nó sẽ bỏ qua phần code phía dưới và đi đến con vật tiếp theo.

for … else

Nếu muốn thực hiện một hành động nào đó sau khi vòng lặp kết thúc thì ta có thể dùng cú pháp for … else. Xét một ví dụ cụ thể:

Vấn đề 5: Cho trước một danh sách numbers = [1,2,3,4,5]. Hãy viết một hàm có một tham số là một số nguyên, nếu số truyền vào có mặt trong danh sách đã cho hãy in Found ra màn hình, ngược lại hãy in ra màn hình Not found.

def main(n):
    numbers = [1,2,3,4,5]
    for x in numbers:
        if(x == n):
            print('Found')
            break
    else:
        print('Not found')
        
main(9)

Output

Not found

Kết thúc bài hôm nay chúng ta đã biết được:

  1. Cách hoạt động của các vòng lặp forwhile trong Python.
  2. Vai trò của hàm range() và một số câu lệnh quan trọng để tác động đến vòng lặp như break, continue.
  3. Sử dụng mệnh đề (clause) else để thực hiện một hành động sau khi vòng lặp kết thúc.

Các bạn hãy thử suy nghĩ về các quiz trong bài, tìm hiểu thêm các vấn đề sử dụng whilebreak, whilecontinue để xử lý nhé.

Python cơ bản

Python cơ bản

Phần 1: Kiến thức tổng quan

Cú pháp (syntax)

Biến (variables)

Chuỗi ký tự (strings)

Số (numbers) trong Python

Boolean trong Python

Vòng lặp trong Python

Danh sách (list) trong Python

Bộ dữ liệu (tuple) trong Python