Trong quá trình học lập trình Python, việc nắm vững các công cụ cơ bản là điều cần thiết để viết code hiệu quả và dễ hiểu. Một trong những công cụ quan trọng thường xuyên được sử dụng trong các vòng lặp chính là hàm range trong Python, giúp tạo ra dãy số nhanh chóng và kiểm soát số lần lặp một cách linh hoạt. Dù bạn là người mới bắt đầu hay đã có kinh nghiệm, việc hiểu rõ cách hoạt động của hàm này sẽ giúp tối ưu hóa chương trình đáng kể. Bài viết dưới đây đây của APTECH SAIGON sẽ giúp bạn nắm vững cú pháp, cách sử dụng và các ví dụ thực tế của hàm range trong Python.
Hàm range trong Python là gì?
Trước khi đi vào cách sử dụng chi tiết, bạn cần hiểu rõ bản chất và vai trò của hàm range trong Python trong việc tạo và quản lý các dãy số. Dưới đây là những khái niệm cơ bản giúp bạn nắm rõ hàm range trong Python là gì và cách nó hoạt động:

Định nghĩa hàm range()
Hàm range() trong Python là một hàm built-in (có sẵn) dùng để tạo ra một dãy số nguyên theo thứ tự, thường được sử dụng trong các vòng lặp như for. Thay vì tạo ra một danh sách (list) chứa toàn bộ các phần tử ngay lập tức, range() trả về một đối tượng kiểu range, giúp tiết kiệm bộ nhớ và tối ưu hiệu suất khi làm việc với các dãy số lớn. Dãy số được tạo ra có thể bắt đầu từ một giá trị xác định, kết thúc tại một điểm nhất định (không bao gồm giá trị kết thúc) và có thể điều chỉnh bước nhảy giữa các phần tử, tùy theo nhu cầu sử dụng của lập trình viên.
Mục đích sử dụng hàm range()
Hàm range() trong Python được sử dụng với mục đích chính là tạo ra các dãy số nguyên phục vụ cho việc lặp và xử lý dữ liệu trong chương trình. Nhờ khả năng xác định điểm bắt đầu, điểm kết thúc và bước nhảy, range() giúp lập trình viên dễ dàng kiểm soát số lần lặp trong các vòng lặp như for, từ đó thực hiện các tác vụ như duyệt phần tử, tạo chuỗi số, hoặc xử lý theo chỉ số (index). Ngoài ra, hàm này còn hỗ trợ viết code ngắn gọn, rõ ràng và tối ưu hơn so với việc tự tạo danh sách thủ công, đặc biệt khi làm việc với các dãy số lớn.
Khi nào nên dùng hàm range()?
Hàm range() trong Python nên được sử dụng trong nhiều tình huống khác nhau khi bạn cần làm việc với các dãy số hoặc kiểm soát vòng lặp một cách linh hoạt. Cụ thể, bạn nên dùng range() trong các trường hợp sau:
- Khi cần lặp một đoạn code theo số lần xác định (ví dụ: lặp 5, 10 hoặc n lần)
- Khi cần tạo dãy số nguyên liên tiếp để xử lý hoặc tính toán
- Khi làm việc với chỉ số (index) của danh sách, tuple hoặc chuỗi
- Khi cần duyệt phần tử theo vị trí thay vì giá trị
- Khi muốn lặp với bước nhảy tùy chỉnh (ví dụ: lấy số chẵn, số lẻ, hoặc tăng giảm theo khoảng nhất định)
- Khi cần lặp ngược (giảm dần) bằng cách sử dụng step âm
- Khi xử lý các bài toán thuật toán liên quan đến dãy số hoặc vòng lặp
Việc sử dụng range() đúng lúc sẽ giúp code trở nên gọn gàng, dễ đọc và tối ưu hơn trong quá trình lập trình.
Cú pháp và các tham số của hàm range()
Sau khi hiểu rõ khái niệm và vai trò, việc nắm vững cú pháp sẽ giúp bạn sử dụng hàm range trong Python một cách chính xác và linh hoạt hơn. Dưới đây là chi tiết về cú pháp và các tham số của hàm range trong Python:
Cú pháp hàm range() trong Python
Trong Python, hàm range() có cú pháp tổng quát như sau:
| range(start, stop, step) |
Các tham số của hàm range()
Trong Python, hàm range() gồm ba tham số chính giúp xác định cách tạo ra dãy số. Mỗi tham số đều có vai trò riêng và có thể linh hoạt sử dụng tùy theo nhu cầu:
- start: Là giá trị bắt đầu của dãy số. Nếu không được truyền vào, Python sẽ mặc định
start = 0. - stop: Là giá trị kết thúc của dãy số, tuy nhiên giá trị này không được bao gồm trong kết quả. Đây là tham số bắt buộc khi sử dụng
range(). - step: Là bước nhảy giữa các phần tử trong dãy số. Nếu không được chỉ định, giá trị mặc định là
1. Bạn cũng có thể sử dụng số âm để tạo dãy giảm dần.
Nhờ ba tham số này, range() cho phép lập trình viên dễ dàng kiểm soát dãy số được tạo ra, từ đó phục vụ nhiều mục đích khác nhau như lặp theo số lần, tạo chuỗi số hoặc xử lý dữ liệu theo quy luật nhất định.
Giá trị trả về của hàm range()
Trong Python, hàm range() không trả về một danh sách (list) như nhiều người thường nghĩ, mà trả về một đối tượng đặc biệt gọi là range object. Đây là một kiểu dữ liệu giúp biểu diễn dãy số một cách “lười” (lazy), nghĩa là các giá trị không được tạo sẵn trong bộ nhớ mà chỉ được sinh ra khi cần sử dụng.
Một số đặc điểm quan trọng của giá trị trả về từ range():
- Không chiếm nhiều bộ nhớ: Do không lưu toàn bộ phần tử như list,
range()rất hiệu quả khi làm việc với dãy số lớn - Có thể lặp (iterable): Có thể sử dụng trực tiếp trong vòng lặp
for - Có thể truy cập phần tử: Hỗ trợ truy cập theo chỉ số như list (ví dụ:
range(5)[2]) - Có thể chuyển đổi sang list hoặc tuple: Khi cần hiển thị hoặc thao tác dữ liệu cụ thể (ví dụ:
list(range(5)))
Nhờ những đặc điểm này, range() trở thành một công cụ vừa linh hoạt vừa tối ưu trong việc xử lý các dãy số trong Python.
■ Xem Thêm: Dấu // Trong Python Là Gì? Tổng Hợp Các Toán Tử Trong Lập Trình Python
Các cách sử dụng hàm range() trong Python
Khi đã hiểu rõ cách hoạt động, việc vận dụng hàm range trong Python vào thực tế sẽ giúp bạn linh hoạt hơn trong việc xử lý vòng lặp và dãy số. Dưới đây là những cách sử dụng hàm range trong Python thường gặp mà bạn nên nắm vững:

Sử dụng range(stop)
Trong Python, khi sử dụng range() với một tham số duy nhất là stop, hàm sẽ tự động lấy giá trị bắt đầu (start) là 0 và bước nhảy (step) là 1. Khi đó, range(stop) sẽ trả về một dãy số nguyên bắt đầu từ 0 và kết thúc tại stop - 1.
Ví dụ:
|
for i in range(5): |
Kết quả:
|
0 1 2 3 4 |
Ngoài ra, nếu giá trị stop bằng 0 hoặc nhỏ hơn 0, hàm range() sẽ trả về một dãy rỗng, tức là không có phần tử nào được tạo ra.
Ví dụ:
|
list(range(0)) # [] list(range(-3)) # [] |
Cách sử dụng này thường được áp dụng khi bạn cần lặp một đoạn code với số lần xác định mà không cần quan tâm đến giá trị bắt đầu.
Sử dụng range(start, stop)
Trong Python, khi sử dụng range() với hai tham số start và stop, hàm sẽ tạo ra một dãy số bắt đầu từ start và kết thúc tại stop - 1. Nếu không truyền tham số step, Python sẽ tự động gán giá trị mặc định là step = 1, tức là các phần tử trong dãy tăng lên từng đơn vị.
Ví dụ:
|
for i in range(2, 6): print(i) |
Kết quả:
|
2 3 4 5 |
Như vậy, range(start, stop) sẽ trả về một chuỗi số nguyên bắt đầu từ start và kết thúc tại stop - 1, không bao gồm giá trị stop. Cách sử dụng này rất hữu ích khi bạn muốn kiểm soát phạm vi lặp cụ thể thay vì luôn bắt đầu từ 0.
Sử dụng range(start, stop, step)
Trong Python, khi sử dụng đầy đủ ba tham số start, stop và step, hàm range() cho phép bạn kiểm soát chi tiết hơn cách tạo dãy số, bao gồm điểm bắt đầu, điểm kết thúc và khoảng cách giữa các phần tử.
- Nếu
step = 0, chương trình sẽ phát sinh lỗi ValueError exception, vì bước nhảy không thể bằng 0 - Nếu
step ≠ 0, Python sẽ kiểm tra xem các tham số có hợp lệ hay không:- Nếu hợp lệ, hàm sẽ trả về một dãy số bắt đầu từ
start, các phần tử cách nhau một khoảng bằngstep, và giá trị cuối cùng luôn nhỏ hơnstop - Nếu không thỏa điều kiện (ví dụ: step dương nhưng
start > stop), kết quả sẽ là một dãy rỗng.
- Nếu hợp lệ, hàm sẽ trả về một dãy số bắt đầu từ
Ví dụ với step > 0:
|
list(range(1, 10, 2)) |
Kết quả:
|
[1, 3, 5, 7, 9] |
Ví dụ với step < 0:
|
list(range(10, 0, -2)) |
Kết quả:
|
[10, 8, 6, 4, 2] |
Cách sử dụng này rất hữu ích khi bạn cần tạo các dãy số theo quy luật cụ thể như số chẵn, số lẻ, hoặc lặp ngược trong các bài toán lập trình.
Ví dụ thực tế về hàm range() Python dễ hiểu
Việc nắm lý thuyết là chưa đủ nếu bạn chưa thấy cách áp dụng hàm range trong Python trong các tình huống cụ thể. Dưới đây là những ví dụ thực tế giúp bạn hiểu rõ hơn cách sử dụng hàm range trong Python một cách đơn giản và dễ nhớ:
Lặp qua danh sách bằng range()
Trong Python, bạn có thể sử dụng hàm range() để lặp qua các phần tử của danh sách thông qua chỉ số (index). Cách này thường được áp dụng khi bạn cần truy cập hoặc xử lý phần tử dựa trên vị trí của chúng trong danh sách.
Ví dụ:
|
arr = [‘a’, ‘b’, ‘c’, ‘d’] for i in range(len(arr)): |
Kết quả:
|
a b c d |
Trong ví dụ trên, range(len(arr)) sẽ tạo ra một dãy chỉ số từ 0 đến len(arr) - 1, tương ứng với vị trí của các phần tử trong danh sách. Sau đó, bạn có thể sử dụng các chỉ số này để truy cập từng phần tử.
Tuy nhiên, trong nhiều trường hợp, bạn có thể sử dụng for item in arr hoặc enumerate() để viết code ngắn gọn và “Pythonic” hơn. Dù vậy, việc dùng range() vẫn rất hữu ích khi bạn cần thao tác trực tiếp với chỉ số của danh sách.
Tạo dãy số với range()
Trong Python, hàm range() thường được sử dụng để tạo ra các dãy số nguyên theo quy luật nhất định, phục vụ cho nhiều mục đích như tính toán, kiểm tra điều kiện hoặc xử lý dữ liệu. Bạn có thể dễ dàng tạo dãy số liên tiếp hoặc dãy có bước nhảy tùy chỉnh chỉ với một dòng lệnh.
Ví dụ:
|
list(range(1, 6)) |
Kết quả:
|
[1, 2, 3, 4, 5] |
Ngoài ra, bạn cũng có thể tạo các dãy số theo quy luật khác, chẳng hạn như số chẵn:
|
list(range(0, 10, 2)) |
Kết quả:
|
[0, 2, 4, 6, 8] |
Hoặc tạo dãy số giảm dần:
|
list(range(5, 0, -1)) |
Kết quả:
|
[5, 4, 3, 2, 1] |
Nhờ tính linh hoạt trong việc thiết lập tham số, range() giúp bạn tạo dãy số một cách nhanh chóng và hiệu quả mà không cần phải xây dựng thủ công từng phần tử.
Kết hợp range() với vòng lặp for
Trong Python, việc kết hợp hàm range() với vòng lặp for là cách sử dụng phổ biến nhất, giúp bạn kiểm soát chính xác số lần lặp trong chương trình. Thay vì lặp qua từng phần tử có sẵn, bạn có thể chủ động tạo ra một dãy số bằng range() và dùng nó để điều khiển vòng lặp.
Ví dụ:
|
for i in range(5): print(“Lần lặp thứ:”, i) |
Kết quả:
|
Lần lặp thứ: 0 Lần lặp thứ: 1 Lần lặp thứ: 2 Lần lặp thứ: 3 Lần lặp thứ: 4 |
Trong ví dụ trên, range(5) tạo ra dãy số từ 0 đến 4, tương ứng với 5 lần lặp của vòng for. Bạn cũng có thể tùy chỉnh phạm vi lặp bằng cách sử dụng đầy đủ các tham số của range():
|
for i in range(1, 6): |
Cách kết hợp này rất hữu ích khi bạn cần lặp theo số lần cụ thể, tạo chỉ số cho dữ liệu, hoặc xử lý các bài toán liên quan đến vòng lặp một cách linh hoạt và hiệu quả.
Sử dụng range() trong list comprehension
Trong Python, hàm range() thường được kết hợp với list comprehension để tạo ra danh sách một cách ngắn gọn và hiệu quả. Thay vì sử dụng vòng lặp for truyền thống, bạn có thể viết code súc tích hơn mà vẫn đảm bảo tính dễ hiểu.
Ví dụ:
|
numbers = [x for x in range(5)] |
Kết quả:
|
[0, 1, 2, 3, 4] |
Bạn cũng có thể áp dụng điều kiện trong list comprehension:
|
even_numbers = [x for x in range(10) if x % 2 == 0] |
Kết quả:
|
[0, 2, 4, 6, 8] |
Trong các ví dụ trên, range() đóng vai trò tạo ra dãy số đầu vào, còn list comprehension giúp biến đổi hoặc lọc dữ liệu một cách linh hoạt. Cách sử dụng này không chỉ giúp code ngắn gọn hơn mà còn thể hiện phong cách viết Python “Pythonic”, rất được khuyến khích trong lập trình.
■ Xem Thêm: Kiểm Tra Số Nguyên Tố Python: 5 Cách Viết Code Đơn Giản & Tối Ưu Nhất
Đặc điểm quan trọng của hàm range() cần biết
Trong Python, hàm range() không chỉ đơn giản là tạo dãy số mà còn sở hữu nhiều đặc điểm quan trọng ảnh hưởng trực tiếp đến cách bạn viết và tối ưu code. Hiểu rõ những đặc điểm này sẽ giúp bạn tránh sai sót và sử dụng range() một cách hiệu quả hơn trong thực tế:
- Không bao gồm giá trị
stop: Đây là đặc điểm quan trọng nhất củarange(). Giá trị kết thúc (stop) sẽ không xuất hiện trong dãy. Ví dụ:range(1, 5)sẽ tạo ra các số từ 1 đến 4. Điều này thường gây nhầm lẫn cho người mới nếu không chú ý. - Trả về đối tượng range (không phải list):
range()không tạo ra danh sách ngay lập tức mà trả về một đối tượng kiểu range. Điều này có nghĩa là các giá trị không được lưu sẵn trong bộ nhớ mà chỉ được sinh ra khi cần. - Tiết kiệm bộ nhớ (lazy evaluation): Nhờ cơ chế “lazy”,
range()cực kỳ hiệu quả khi làm việc với dãy số lớn. Ví dụ,range(1_000_000)không chiếm nhiều bộ nhớ như một list tương đương. - Có thể sử dụng như một iterable: Đối tượng
rangecó thể dùng trực tiếp trong các vòng lặp nhưfor, hoặc các cấu trúc xử lý iterable khác (ví dụ:sum(),min(),max()). - Hỗ trợ truy cập phần tử theo chỉ số: Bạn có thể truy cập phần tử trong
range()giống như list:range(10)[3]# Kết quả: 3→ Điều này giúprange()linh hoạt hơn trong nhiều tình huống xử lý dữ liệu. - Cho phép sử dụng bước nhảy (step) linh hoạt: Bạn có thể tạo các dãy số theo quy luật cụ thể: tăng dần (step > 0), giảm dần (step < 0) hoặc nhảy cách quãng (ví dụ: số chẵn, số lẻ).
- Có thể tạo dãy rỗng nếu điều kiện không hợp lệ: Nếu các tham số không phù hợp (ví dụ:
start > stopnhưngstepdương),range()sẽ trả về một dãy rỗng thay vì báo lỗi. - Có thể chuyển đổi sang các kiểu dữ liệu khác: Khi cần hiển thị hoặc thao tác cụ thể, bạn có thể chuyển
range()thành list hoặc tuple:list(range(5)) # [0, 1, 2, 3, 4] - Hiệu suất cao trong vòng lặp: Khi sử dụng trong vòng lặp,
range()giúp chương trình chạy nhanh và tối ưu hơn so với việc tạo list thủ công, đặc biệt trong các bài toán xử lý dữ liệu lớn.
So sánh range() và list trong Python
Trong Python, range() và list đều có thể được sử dụng để làm việc với dãy số, tuy nhiên chúng có nhiều điểm khác biệt quan trọng về cách hoạt động, hiệu suất và mục đích sử dụng. Việc hiểu rõ sự khác nhau này sẽ giúp bạn lựa chọn công cụ phù hợp trong từng tình huống cụ thể.
Dưới đây là bảng so sánh chi tiết giữa range() và list:
| Tiêu chí | range() |
list |
| Kiểu dữ liệu | range object | list |
| Cách lưu trữ | Không lưu sẵn phần tử (lazy) | Lưu toàn bộ phần tử trong bộ nhớ |
| Bộ nhớ sử dụng | Tiết kiệm | Tốn nhiều hơn |
| Hiệu suất | Nhanh hơn với dãy lớn | Chậm hơn khi dữ liệu lớn |
| Khả năng chỉnh sửa | Không thể thay đổi trực tiếp | Có thể thêm, xóa, sửa phần tử |
| Truy cập phần tử | Có (theo index) | Có (theo index) |
| Sử dụng phổ biến | Vòng lặp, tạo dãy số | Lưu trữ và xử lý dữ liệu |
Khi nào nên dùng range() và khi nào nên dùng list?
- Nên dùng
range()khi bạn chỉ cần tạo dãy số để lặp hoặc tính toán mà không cần lưu trữ toàn bộ dữ liệu - Nên dùng
listkhi bạn cần lưu trữ, chỉnh sửa hoặc thao tác trực tiếp với từng phần tử
Tóm lại, range() phù hợp với các bài toán tối ưu hiệu suất và vòng lặp, trong khi list linh hoạt hơn trong việc xử lý và quản lý dữ liệu.
■ Xem Thêm: Tìm Ước Chung Lớn Nhất Python: 10 Cách Viết Code Đơn Giản & Hiệu Quả Nhất
Những lỗi thường gặp khi dùng hàm range() & Cách xử lý
Trong quá trình sử dụng, nhiều người học thường mắc phải những lỗi cơ bản khi làm việc với hàm range trong Python do chưa hiểu rõ cách hoạt động của nó. Dưới đây là những lỗi thường gặp khi dùng hàm range trong Python và cách xử lý hiệu quả:
Hiểu sai giá trị stop
Một trong những lỗi phổ biến nhất khi sử dụng range() trong Python là hiểu sai về giá trị stop. Nhiều người mới thường nghĩ rằng stop là giá trị cuối cùng của dãy, nhưng thực tế stop không được bao gồm trong kết quả.
Ví dụ:
|
list(range(1, 5)) |
Kết quả:
|
[1, 2, 3, 4] |
Trong trường hợp này, số 5 không xuất hiện trong dãy. Điều này có thể dẫn đến lỗi logic, đặc biệt khi bạn cần lặp đủ số lần hoặc xử lý đến một giá trị cụ thể.
Cách xử lý:
- Luôn nhớ rằng
range(start, stop)sẽ dừng trướcstop - Nếu bạn muốn bao gồm giá trị
stop, hãy tăng giá trị này lên 1
Ví dụ đúng:
|
list(range(1, 6)) # Bao gồm cả 5 |
Sử dụng step = 0 gây lỗi
Trong Python, một lỗi khá nghiêm trọng khi sử dụng hàm range() là đặt giá trị step = 0. Do step đại diện cho bước nhảy giữa các phần tử trong dãy, nên nếu bằng 0, chương trình sẽ không thể xác định cách di chuyển từ giá trị này sang giá trị tiếp theo. Vì vậy, Python sẽ phát sinh lỗi ValueError.
Ví dụ:
|
range(1, 10, 0) |
Khi chạy đoạn code trên, bạn sẽ nhận được thông báo lỗi tương tự:
|
ValueError: range() arg 3 must not be zero |
Cách xử lý:
- Luôn đảm bảo
stepkhác 0 khi sử dụngrange() - Xác định rõ mục đích tăng hay giảm để chọn
stepphù hợp (dương hoặc âm) - Kiểm tra giá trị
steptrước khi truyền vào hàm, đặc biệt khi lấy từ biến hoặc dữ liệu đầu vào.
Nhầm range() với list
Một lỗi khá phổ biến khi học Python là nhầm lẫn giữa range() và list. Nhiều người cho rằng range() trả về một danh sách các số, nhưng thực tế nó chỉ trả về một đối tượng range, không phải list.
Ví dụ:
|
r = range(5) print(r) |
Kết quả:
|
range(0, 5) |
Trong trường hợp này, r không phải là [0, 1, 2, 3, 4] mà là một đối tượng đại diện cho dãy số. Điều này có thể gây khó khăn khi bạn muốn hiển thị hoặc thao tác trực tiếp với các phần tử như thêm, xóa hoặc sửa.
Cách xử lý:
- Nếu cần làm việc như với list, hãy chuyển đổi bằng hàm
list() - Hiểu rõ rằng
range()chỉ dùng để sinh dãy số khi cần, không lưu trữ toàn bộ dữ liệu
Ví dụ:
|
list(range(5)) # [0, 1, 2, 3, 4] |
Sai logic khi dùng step âm
Trong Python, step âm được sử dụng để tạo dãy số giảm dần, tuy nhiên nếu không thiết lập đúng mối quan hệ giữa start, stop và step, bạn rất dễ gặp lỗi logic khiến kết quả trả về là một dãy rỗng.
Ví dụ sai:
|
list(range(1, 10, -1)) |
Kết quả:
|
[] |
Nguyên nhân là do step âm (giảm dần) nhưng start < stop, khiến điều kiện lặp không bao giờ thỏa mãn.
Cách xử lý:
- Khi dùng
stepâm, cần đảm bảostart > stop - Hiểu rõ hướng di chuyển của dãy số (tăng hay giảm) trước khi thiết lập tham số
Ví dụ đúng:
|
list(range(10, 1, -1)) |
Kết quả:
|
[10, 9, 8, 7, 6, 5, 4, 3, 2] |
Mẹo sử dụng hàm range() trong Python hiệu quả
Trong Python, việc sử dụng hàm range() đúng cách không chỉ giúp code hoạt động chính xác mà còn tối ưu về hiệu suất và dễ đọc hơn. Dưới đây là một số mẹo quan trọng giúp bạn tận dụng tối đa sức mạnh của range() trong thực tế:
- Ưu tiên dùng
enumerate()thay vìrange(len())khi có thể: Khi lặp qua danh sách, nhiều người thường viếtfor i in range(len(arr)), tuy nhiên cách này không “Pythonic”. Thay vào đó, bạn nên dùngenumerate()để vừa lấy được chỉ số vừa lấy được giá trị:
|
for index, value in enumerate(arr): print(index, value) |
- Tận dụng
range()để kiểm soát số lần lặp:range()là công cụ lý tưởng khi bạn cần lặp một đoạn code theo số lần xác định, giúp code rõ ràng và dễ kiểm soát hơn so với các cách lặp khác. - Sử dụng step hợp lý để tối ưu vòng lặp: Thay vì lặp qua toàn bộ phần tử rồi lọc, bạn có thể dùng
stepđể lấy trực tiếp giá trị cần thiết (ví dụ: số chẵn, số lẻ), giúp giảm số lần lặp không cần thiết. - Kết hợp với list comprehension để viết code ngắn gọn:
range()hoạt động rất tốt khi kết hợp với list comprehension, giúp bạn tạo và xử lý danh sách chỉ trong một dòng code. - Tránh chuyển đổi sang list nếu không cần thiết: Do
range()đã tối ưu bộ nhớ, bạn chỉ nên dùnglist(range(...))khi thực sự cần thao tác với dữ liệu, tránh làm tăng tài nguyên không cần thiết. - Hiểu rõ mối quan hệ giữa start, stop và step: Đây là yếu tố quan trọng để tránh lỗi logic, đặc biệt khi làm việc với dãy giảm hoặc bước nhảy lớn.
- Sử dụng range() trong các bài toán thuật toán:
range()rất hữu ích trong các bài toán liên quan đến vòng lặp, dãy số, hoặc xử lý chỉ số, giúp code rõ ràng và dễ tối ưu hơn.
■ Xem Thêm: Tìm Bội Chung Nhỏ Nhất Python: 8+ Cách Viết Code Đơn Giản & Hiệu Quả
Bài tập vận dụng hàm range() trong Python (có lời giải)
Sau khi đã nắm vững lý thuyết, việc luyện tập sẽ giúp bạn hiểu sâu và sử dụng hàm range trong Python một cách thành thạo hơn. Dưới đây là một số bài tập vận dụng hàm range trong Python kèm lời giải chi tiết để bạn tham khảo:
Bài tập 1: In ra các số chẵn từ 0 đến 20
Đề bài: Sử dụng hàm range() trong Python để in ra tất cả các số chẵn từ 0 đến 20.
Phân tích:
- Các số chẵn là những số chia hết cho 2
- Dãy số cần in bắt đầu từ 0 và kết thúc trước hoặc bằng 20
- Có thể sử dụng
step = 2để nhảy qua các số chẵn
Lời giải:
|
for i in range(0, 21, 2): print(i) |
Kết quả:
|
0 2 4 6 8 10 12 14 16 18 20 |
Giải thích chi tiết:
start = 0: bắt đầu từ số 0stop = 21: vìrange()không bao gồm giá trị cuối nên cần đặt là 21 để lấy đến 20step = 2: mỗi lần tăng 2 đơn vị → tạo ra các số chẵn
Mở rộng:
Bạn cũng có thể giải bài này theo cách khác bằng cách lọc điều kiện:
|
for i in range(21): if i % 2 == 0: print(i) |
Tuy nhiên, cách dùng step = 2 sẽ tối ưu hơn vì giảm số lần lặp không cần thiết.
Bài tập 2: Tính tổng các số từ 1 đến n
Đề bài: Sử dụng hàm range() trong Python để tính tổng các số nguyên từ 1 đến n (với n là số do người dùng nhập vào).
Phân tích:
- Cần lặp qua các số từ 1 đến n
- Vì
range()không bao gồm giá trị cuối nên cần dùngrange(1, n + 1) - Sử dụng biến để lưu tổng
Lời giải:
|
n = int(input(“Nhập số n: “)) for i in range(1, n + 1): print(“Tổng là:”, total) |
Ví dụ chạy chương trình:
|
Nhập số n: 5 Tổng là: 15 |
Giải thích chi tiết:
range(1, n + 1): tạo dãy từ 1 đến n- Biến
totaldùng để cộng dồn giá trị qua từng vòng lặp - Mỗi lần lặp,
isẽ được cộng vàototal
Cách tối ưu hơn:
Bạn có thể sử dụng trực tiếp hàm sum() kết hợp với range():
|
n = int(input(“Nhập số n: “)) total = sum(range(1, n + 1)) print(“Tổng là:”, total) |
Cách này giúp code ngắn gọn hơn nhưng vẫn đảm bảo hiệu quả và dễ hiểu.
Bài tập 3: In bảng cửu chương của một số
Đề bài: Sử dụng hàm range() trong Python để in bảng cửu chương của một số nguyên n (từ 1 đến 10).
Phân tích:
- Cần lặp từ 1 đến 10
- Với mỗi lần lặp, thực hiện phép nhân
n * i - Sử dụng
range(1, 11)vìstopkhông bao gồm giá trị cuối
Lời giải:
|
n = int(input(“Nhập số n: “)) for i in range(1, 11): |
Ví dụ chạy chương trình:
|
Nhập số n: 5 |
Giải thích chi tiết:
range(1, 11): tạo dãy từ 1 đến 10- Mỗi lần lặp, biến
iđại diện cho số nhân - Sử dụng f-string để hiển thị kết quả rõ ràng, dễ đọc
Mở rộng:
Bạn có thể in toàn bộ bảng cửu chương từ 1 đến 9 bằng cách dùng vòng lặp lồng nhau:
|
for i in range(1, 10): |
Bài tập này giúp bạn hiểu rõ cách kết hợp range() với vòng lặp for, đặc biệt trong các bài toán lặp nhiều tầng (nested loop).
Bài tập 4: Đảo ngược chuỗi bằng range()
Đề bài: Sử dụng hàm range() trong Python để đảo ngược một chuỗi do người dùng nhập vào.
Phân tích:
- Chuỗi có thể truy cập theo chỉ số
- Cần lặp từ vị trí cuối về đầu
- Sử dụng
range(start, stop, step)vớistep = -1 start = len(chuoi) - 1,stop = -1để duyệt hết chuỗi
Lời giải:
|
s = input(“Nhập chuỗi: “) for i in range(len(s) – 1, –1, –1): print(“Chuỗi đảo ngược là:”, reversed_s) |
Ví dụ chạy chương trình:
|
Nhập chuỗi: hello Chuỗi đảo ngược là: olleh |
Giải thích chi tiết:
len(s) - 1: vị trí ký tự cuối cùng-1: điểm dừng (không bao gồm), giúp lặp đến index 0step = -1: duyệt ngược chuỗi- Mỗi lần lặp, ký tự sẽ được nối vào biến
reversed_s
Cách tối ưu hơn:
Bạn có thể viết ngắn gọn hơn bằng slicing (không dùng range()):
|
s = input(“Nhập chuỗi: “) |
Tuy nhiên, bài tập này giúp bạn hiểu rõ cách sử dụng range() với step âm trong các bài toán xử lý chuỗi và vòng lặp.
Bài tập 5: Đếm số lượng số chia hết cho 3 trong khoảng cho trước
Đề bài: Sử dụng hàm range() trong Python để đếm xem có bao nhiêu số chia hết cho 3 trong khoảng từ 1 đến n (n do người dùng nhập).
Phân tích:
- Cần duyệt các số từ 1 đến n
- Kiểm tra điều kiện
i % 3 == 0 - Tăng biến đếm mỗi khi thỏa điều kiện
Lời giải:
|
n = int(input(“Nhập số n: “)) for i in range(1, n + 1): print(“Số lượng số chia hết cho 3 là:”, count) |
Ví dụ chạy chương trình:
|
Nhập số n: 10 |
Giải thích chi tiết:
range(1, n + 1): tạo dãy từ 1 đến n- Điều kiện
i % 3 == 0: kiểm tra số chia hết cho 3 - Biến
countdùng để đếm số lượng thỏa mãn
Cách tối ưu hơn:
Bạn có thể tận dụng step = 3 để giảm số lần lặp:
|
n = int(input(“Nhập số n: “)) print(“Số lượng số chia hết cho 3 là:”, count) |
Cách này không cần kiểm tra điều kiện mà vẫn cho kết quả chính xác, đồng thời giúp chương trình chạy hiệu quả hơn.
■ Xem Thêm: Học Python Để Làm Gì? Cơ Hội Việc Làm & Mức Lương Python Developer [2026]
Các câu hỏi thường gặp về hàm range()
Trong quá trình học và sử dụng, nhiều người thường có những thắc mắc xoay quanh hàm range trong Python do đặc điểm hoạt động khá đặc biệt của nó. Dưới đây là những câu hỏi thường gặp về hàm range trong Python kèm giải đáp chi tiết giúp bạn hiểu rõ hơn.
range() có phải là list không?
Trong Python, range() không phải là list mà là một đối tượng kiểu range. Đối tượng này chỉ đại diện cho một dãy số và không lưu trữ toàn bộ phần tử trong bộ nhớ như list, giúp tối ưu hiệu suất. Tuy nhiên, bạn vẫn có thể chuyển range() thành list khi cần bằng cách sử dụng list(range(...)).
Làm sao chuyển range thành list?
Trong Python, để chuyển một đối tượng range() thành list, bạn chỉ cần sử dụng hàm list(). Cách này sẽ tạo ra một danh sách chứa toàn bộ các phần tử trong dãy số của range().
Ví dụ: list(range(5)) # [0, 1, 2, 3, 4]
Việc chuyển đổi này thường được sử dụng khi bạn cần hiển thị, truy cập hoặc thao tác trực tiếp với các phần tử như một danh sách thông thường.
Khi nào nên dùng range()?
Trong Python, để chuyển một đối tượng range() thành list, bạn chỉ cần sử dụng hàm list(). Cách này sẽ tạo ra một danh sách chứa toàn bộ các phần tử trong dãy số của range().
range() có tốn bộ nhớ không?
Trong Python, bạn nên sử dụng range() khi cần tạo dãy số để điều khiển số lần lặp trong vòng lặp for hoặc xử lý dữ liệu theo chỉ số. Hàm này đặc biệt hữu ích khi bạn không cần lưu trữ toàn bộ phần tử mà chỉ cần sinh giá trị khi sử dụng, giúp tiết kiệm bộ nhớ và tối ưu hiệu suất.
Có thể dùng range với số âm không?
Trong Python, bạn hoàn toàn có thể sử dụng range() với số âm, đặc biệt thông qua tham số step âm để tạo dãy số giảm dần. Ví dụ, range(10, 0, -1) sẽ tạo ra dãy từ 10 đến 1. Tuy nhiên, cần đảm bảo giá trị start lớn hơn stop khi dùng step âm, nếu không kết quả sẽ là một dãy rỗng.
Qua bài viết này, bạn đã nắm được toàn bộ kiến thức từ cơ bản đến nâng cao về hàm range trong Python, bao gồm cú pháp, cách sử dụng, ví dụ thực tế cũng như các lỗi thường gặp và mẹo tối ưu khi lập trình. Đây là một công cụ quan trọng giúp kiểm soát vòng lặp và xử lý dãy số hiệu quả trong Python. Hy vọng những kiến thức trên sẽ giúp bạn sử dụng hàm range trong Python một cách linh hoạt và tự tin hơn trong quá trình học và làm việc.
■ Xem Thêm: TOP 30+ Khóa Học Python TPHCM Chất Lượng & Uy Tín Nhất [UPDATE 2026]

