Trong bài viết chuyên sâu này, chúng ta sẽ cùng nhau khám phá mọi khía cạnh của vòng lặp for trong Python, từ cú pháp cơ bản đến các kỹ thuật nâng cao như lồng vòng lặp, sử dụng hàm range()
, và kiểm soát luồng với các lệnh break
và continue
. Chúng ta sẽ đi qua từng ví dụ cụ thể, giúp bạn nắm vững cách vận dụng for loop
vào các dự án thực tế.
Khi nào nên sử dụng vòng lặp for
Bạn nên sử dụng vòng lặp for
bất cứ khi nào bạn cần lặp lại một khối mã một số lần cố định. Nếu bạn không biết số lần cần lặp lại, hãy sử dụng câu lệnh while loop
thay thế.
Cú pháp cơ bản của vòng lặp for
trong Python
Cú pháp cơ bản của vòng lặp for
trong Python trông tương tự như đoạn mã dưới đây.
for iterator_variable in sequence_name:
Statements
. . .
Statements
Cú pháp vòng lặp for
trong Python chi tiết
Chúng ta sẽ đi sâu vào từng thành phần của cú pháp vòng lặp for
:
- Từ khóa
for
: Từ khóa này khởi đầu câu lệnh, báo hiệu sự bắt đầu của một vòng lặpfor
. - Biến lặp (
iterator_variable
): Biến này sẽ lặp qua các phần tử củasequence
và bạn có thể sử dụng nó bên trong vòng lặp để thực hiện các chức năng khác nhau. - Từ khóa
in
: Từ khóa này trong Python thông báo cho biến lặp rằng nó cần duyệt qua các phần tử bên trongsequence
. - Biến
sequence
: Đây có thể là mộtlist
,tuple
,string
, hoặc bất kỳ loại đối tượng có thể lặp. - Phần
Statements
: Đây là nơi bạn có thể xử lý biến lặp và thực hiện các chức năng mong muốn.
In từng ký tự của một chuỗi sử dụng vòng lặp for
Chuỗi (string
) trong Python là một tập hợp các ký tự. Nếu trong bất kỳ ứng dụng lập trình nào của bạn, bạn cần duyệt qua từng ký tự của một chuỗi một cách riêng lẻ, bạn có thể sử dụng vòng lặp for
ở đây.
Đây là cách chúng ta thực hiện:
word="anaconda"
for letter in word:
print (letter)
Output:
a
n
a
c
o
n
d
a
Lý do vòng lặp này hoạt động là vì Python coi một string
là một chuỗi các ký tự thay vì nhìn nhận toàn bộ string
như một thể thống nhất.
Sử dụng vòng lặp for
để lặp qua một list
hoặc tuple
trong Python
Các List
và Tuple
là các đối tượng có thể lặp (iterable objects
). Bây giờ, chúng ta hãy xem cách chúng ta có thể lặp qua các phần tử bên trong các đối tượng này.
words= ["Apple", "Banana", "Car", "Dolphin" ]
for word in words:
print (word)
Output:
Apple
Banana
Car
Dolphin
Bây giờ, chúng ta hãy tiếp tục và thực hiện việc lặp qua các phần tử của một tuple
.
nums = (1, 2, 3, 4)
sum_nums = 0
for num in nums:
sum_nums = sum_nums + num
print(f'Sum of numbers is {sum_nums}')
# Output
# Sum of numbers is 10
Lồng các vòng lặp for
trong Python
Khi chúng ta có một vòng lặp for
bên trong một vòng lặp for
khác, đó được gọi là vòng lặp for
lồng nhau (nested for loop
). Có nhiều ứng dụng cho vòng lặp for
lồng nhau.
Hãy xem xét ví dụ list
ở trên. Vòng lặp for
in ra từng từ riêng lẻ từ list
. Nhưng điều gì sẽ xảy ra nếu chúng ta muốn in ra từng ký tự của mỗi từ trong list
đó?
Đây là lúc vòng lặp for
lồng nhau hoạt động hiệu quả hơn. Vòng lặp bên ngoài sẽ duyệt qua từng từ một. Vòng lặp bên trong sẽ duyệt qua các ký tự của mỗi từ.
words= ["Apple", "Banana", "Car", "Dolphin" ]
for word in words:
#Vòng lặp này đang lấy từng từ từ danh sách
print ("The following lines will print each letters of "+word)
for letter in word:
#Vòng lặp này đang lấy từng chữ cái cho từ
print (letter)
print("") #Dòng này dùng để in ra một dòng trống
Output
The following lines will print each letters of Apple
A
p
p
l
e
The following lines will print each letters of Banana
B
a
n
a
n
a
The following lines will print each letters of Car
C
a
r
The following lines will print each letters of Dolphin
D
o
l
p
h
i
n
Vòng lặp lồng nhau có cấu trúc tương tự như các câu lệnh if
lồng nhau.
Vòng lặp for
trong Python với hàm range()
Hàm range()
của Python là một trong những hàm tích hợp sẵn (built-in functions
). Khi bạn muốn vòng lặp for
chạy một số lần cụ thể hoặc bạn cần chỉ định một phạm vi các đối tượng để in ra, hàm range()
hoạt động rất hiệu quả.
Khi làm việc với range()
, bạn có thể truyền từ 1 đến 3 đối số kiểu số nguyên cho nó:
start
: chỉ định giá trị số nguyên mà chuỗi bắt đầu; nếu không được bao gồm,start
sẽ bắt đầu từ 0.stop
: luôn cần thiết và là số nguyên được đếm đến nhưng không bao gồm.step
: thiết lập mức tăng (hoặc giảm trong trường hợp số âm) cho lần lặp tiếp theo; nếu bỏ qua,step
mặc định là 1.
Hãy xem xét ví dụ sau, nơi tôi muốn in các số 1, 2 và 3:
for x in range(3):
print("Printing:", x)
# Output
# Printing: 0
# Printing: 1
# Printing: 2
Hàm range
cũng nhận một tham số khác ngoài start
và stop
. Đó là tham số step
. Nó cho hàm range
biết cần bỏ qua bao nhiêu số giữa mỗi lần đếm.
Trong ví dụ dưới đây, tôi đã sử dụng số 3 làm step
và bạn có thể thấy các số đầu ra là số trước đó + 3.
for n in range(1, 10, 3):
print("Printing with step:", n)
# Output
# Printing with step: 1
# Printing with step: 4
# Printing with step: 7
Chúng ta cũng có thể sử dụng giá trị âm cho đối số step
để lặp ngược lại, nhưng chúng ta sẽ phải điều chỉnh các đối số start
và stop
của mình cho phù hợp.
for i in range(100,0,-10):
print(i)
Tại đây, 100 là giá trị start
, 0 là giá trị stop
, và -10 là step
, vì vậy vòng lặp bắt đầu ở 100 và kết thúc ở 0, giảm 10 với mỗi lần lặp. Điều này xảy ra trong đầu ra:
Output
100
90
80
70
60
50
40
30
20
10
Khi lập trình trong Python, các vòng lặp for
thường sử dụng kiểu sequence range()
làm tham số cho việc lặp.
Câu lệnh break
với vòng lặp for
Câu lệnh break
được sử dụng để thoát khỏi vòng lặp for
một cách sớm. Chúng ta sử dụng nó để dừng vòng lặp for
khi một điều kiện cụ thể được đáp ứng.
Giả sử chúng ta có một danh sách các số và chúng ta muốn kiểm tra xem một số có tồn tại hay không. Chúng ta có thể lặp qua danh sách các số và nếu tìm thấy số đó, chúng ta thoát khỏi vòng lặp vì chúng ta không cần tiếp tục lặp qua các phần tử còn lại.
Trong trường hợp này, chúng ta sẽ sử dụng câu lệnh điều kiện if-else
của Python cùng với vòng lặp for
của mình.
nums = [1, 2, 3, 4, 5, 6]
n = 2
found = False
for num in nums:
if n == num:
found = True
break
print(f'List contains {n}: {found}')
# Output
# List contains 2: True
Câu lệnh continue
với vòng lặp for
Chúng ta có thể sử dụng câu lệnh continue
bên trong vòng lặp for
để bỏ qua việc thực thi thân vòng lặp for
cho một điều kiện cụ thể.
Giả sử chúng ta có một danh sách các số và chúng ta muốn in tổng các số dương. Chúng ta có thể sử dụng câu lệnh continue
để bỏ qua vòng lặp for
cho các số âm.
nums = [1, 2, -3, 4, -5, 6]
sum_positives = 0
for num in nums:
if num < 0:
continue
sum_positives += num
print(f'Sum of Positive Numbers: {sum_positives}')
Output:
Sum of Positive Numbers: 13
Vòng lặp for
trong Python với khối else
Chúng ta có thể sử dụng khối else
với vòng lặp for
của Python. Khối else
chỉ được thực thi khi vòng lặp for
không bị chấm dứt bởi câu lệnh break
.
Giả sử chúng ta có một hàm để in tổng các số nếu và chỉ nếu tất cả các số đều là số chẵn.
Chúng ta có thể sử dụng câu lệnh break
để chấm dứt vòng lặp for
nếu có một số lẻ. Chúng ta có thể in tổng trong phần else
để nó chỉ được in khi vòng lặp for
được thực thi bình thường.
def print_sum_even_nums(even_nums):
total = 0
for x in even_nums:
if x % 2 != 0:
break
total += x
else:
print("For loop executed normally")
print(f'Sum of numbers {total}')
# này sẽ in tổng
print_sum_even_nums([2, 4, 6, 8])
# này sẽ không in tổng vì có một số lẻ trong chuỗi
print_sum_even_nums([2, 4, 5, 8])
# Output
# For loop executed normally
# Sum of numbers 20
Vòng lặp for
sử dụng các kiểu dữ liệu tuần tự
Các List
và các kiểu dữ liệu tuần tự khác có thể được tận dụng làm tham số lặp trong vòng lặp for
. Thay vì lặp qua một range()
, bạn có thể định nghĩa một list
và lặp qua list
đó.
Chúng ta sẽ gán một list
cho một biến, và sau đó lặp qua list
đó:
sharks = ['hammerhead', 'great white', 'dogfish', 'frilled', 'bullhead', 'requiem']
for shark in sharks:
print(shark)
Trong trường hợp này, chúng ta đang in ra từng mục trong list
. Mặc dù chúng ta đã sử dụng biến shark
, chúng ta có thể gọi biến đó bằng bất kỳ tên biến hợp lệ nào khác và chúng ta sẽ nhận được cùng một đầu ra:
Output
hammerhead
great white
dogfish
frilled
bullhead
requiem
Đầu ra trên cho thấy vòng lặp for
đã lặp qua list
và in ra từng mục từ list
trên mỗi dòng.
Các List
và các kiểu dữ liệu dựa trên sequence
khác như string
và tuple
thường được sử dụng với các vòng lặp vì chúng có thể lặp (iterable
). Bạn có thể kết hợp các kiểu dữ liệu này với range()
để thêm các mục vào một list
chẳng hạn:
sharks = ['hammerhead', 'great white', 'dogfish', 'frilled', 'bullhead', 'requiem']
for item in range(len(sharks)):
sharks.append('shark')
print(sharks)
Output
['hammerhead', 'great white', 'dogfish', 'frilled', 'bullhead', 'requiem', 'shark', 'shark', 'shark', 'shark', 'shark', 'shark']
Tại đây, chúng ta đã thêm một chuỗi giữ chỗ là 'shark'
cho mỗi mục có độ dài bằng list
sharks
.
Tương tự, bạn có thể sử dụng vòng lặp for
để xây dựng một list
từ đầu:
integers = []
for i in range(10):
integers.append(i)
print(integers)
Trong ví dụ này, list
integers
được khởi tạo trống, nhưng vòng lặp for
điền dữ liệu vào list
như sau:
Output
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Tương tự, chúng ta có thể lặp qua các chuỗi:
sammy = 'Sammy'
for letter in sammy:
print(letter)
Output
S
a
m
m
y
Lặp qua các tuple
được thực hiện theo cùng định dạng như lặp qua list
hoặc string
ở trên.
Khi lặp qua một dictionary
, điều quan trọng là phải ghi nhớ cấu trúc key : value
để đảm bảo rằng bạn đang gọi đúng phần tử của dictionary
. Dưới đây là một ví dụ gọi cả key
và value
:
sammy_shark = {'name': 'Sammy', 'animal': 'shark', 'color': 'blue', 'location': 'ocean'}
for key in sammy_shark:
print(key + ': ' + sammy_shark[key])
Output
name: Sammy
animal: shark
location: ocean
color: blue
Khi sử dụng dictionary
với vòng lặp for
, biến lặp tương ứng với các key
của dictionary
, và dictionary_variable[iterating_variable]
tương ứng với các value
. Trong trường hợp trên, biến lặp key
được sử dụng để đại diện cho key
, và sammy_shark[key]
được sử dụng để đại diện cho các value
.
Các vòng lặp thường được sử dụng để lặp và thao tác các kiểu dữ liệu tuần tự.
Kết luận
Vòng lặp for trong Python có nhiều điểm tương đồng với các ngôn ngữ lập trình khác, nhưng cũng mang những nét đặc trưng riêng biệt mà chúng ta đã cùng nhau khám phá. Chúng ta đã thấy cách nó là một công cụ không thể thiếu để duyệt qua các đối tượng tuần tự như list
, tuple
, string
, và dictionary
. Khả năng kiểm soát luồng với break
và continue
, cùng với việc sử dụng range()
để tạo các chuỗi số tùy chỉnh, mang lại sự linh hoạt đáng kinh ngạc cho các tác vụ lặp. Đặc biệt, việc Python hỗ trợ khối else
cho vòng lặp for
(khi vòng lặp hoàn thành mà không bị break
) là một điểm nhấn thú vị, mở ra các kịch bản lập trình độc đáo.
Tôi hy vọng bài viết này đã cung cấp cho bạn những kiến thức sâu sắc và ý tưởng thú vị về cách làm việc hiệu quả với vòng lặp for
.