🧾 6.1 Bản chất của range()
📖 Giới thiệu
Trước khi học vòng lặp for, chúng ta cần hiểu range() - công cụ tạo ra dãy số. range() giống như một máy tạo số theo thứ tự, giúp chúng ta điều khiển vòng lặp dễ dàng.
Mục tiêu bài học:
- Hiểu cách hoạt động của hàm
range() - Biết các cách sử dụng
range()khác nhau - Tạo dãy số theo ý muốn
🔧 Cú pháp
1. 📏 range(stop) - Dạng đơn giản:
python
# Tạo số từ 0 đến n-1
range(5) # 0, 1, 2, 3, 4
# Xem kết quả
print(list(range(5))) # [0, 1, 2, 3, 4]2. 📊 range(start, stop) - Có điểm bắt đầu:
python
# Tạo số từ start đến stop-1
range(2, 7) # 2, 3, 4, 5, 6
# Xem kết quả
print(list(range(2, 7))) # [2, 3, 4, 5, 6]3. ⚡ range(start, stop, step) - Có bước nhảy:
python
# Tạo số với bước nhảy
range(0, 10, 2) # 0, 2, 4, 6, 8
# Xem kết quả
print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8]🔬 Phân tích & Giải thích chi tiết
1. 🔍 range() hoạt động như thế nào?
python
# range() chỉ tạo số khi cần thiết
day_so = range(5)
print(day_so) # range(0, 5) - chưa tạo số
print(list(day_so)) # [0, 1, 2, 3, 4] - mới tạo số
# Kiểm tra từng phần tử
for so in range(5):
print(so) # In từng số: 0, 1, 2, 3, 42. 📏 Các ví dụ range() đơn giản
python
# Đếm từ 0 đến 4
print("range(5):", list(range(5)))
# Kết quả: [0, 1, 2, 3, 4]
# Đếm từ 1 đến 5
print("range(1, 6):", list(range(1, 6)))
# Kết quả: [1, 2, 3, 4, 5]
# Đếm từ 0 đến 8, nhảy 2
print("range(0, 9, 2):", list(range(0, 9, 2)))
# Kết quả: [0, 2, 4, 6, 8]
# Đếm ngược từ 10 đến 1
print("range(10, 0, -1):", list(range(10, 0, -1)))
# Kết quả: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]3. 🎯 Các trường hợp đặc biệt
python
# Range rỗng
print(list(range(0))) # []
print(list(range(5, 5))) # []
print(list(range(5, 2))) # []
# Range với step âm
print(list(range(5, 0, -1))) # [5, 4, 3, 2, 1]
print(list(range(0, -5, -1))) # [0, -1, -2, -3, -4]
# Range với số âm
print(list(range(-3, 3))) # [-3, -2, -1, 0, 1, 2]💻 Ví dụ minh họa
Ví dụ 1: Tạo danh sách số chẵn
python
# tao_so_chan.py
print("🔢 TẠO DANH SÁCH SỐ CHẴN")
print("=" * 30)
# Nhập giới hạn
gioi_han = int(input("Nhập số giới hạn: "))
# Cách 1: Dùng range với step=2
so_chan_1 = list(range(0, gioi_han + 1, 2))
print(f"Cách 1 - step=2: {so_chan_1}")
# Cách 2: Dùng range và kiểm tra chẵn
so_chan_2 = []
for so in range(gioi_han + 1):
if so % 2 == 0:
so_chan_2.append(so)
print(f"Cách 2 - kiểm tra: {so_chan_2}")
# So sánh
print(f"Kết quả giống nhau: {so_chan_1 == so_chan_2}")Ví dụ 2: Bảng cửu chương với range
python
# bang_cuu_chuong.py
print("✖️ BẢNG CỬU CHƯƠNG")
print("=" * 25)
# Chọn bảng cửu chương
bang = int(input("Chọn bảng cửu chương (1-10): "))
print(f"\n📋 BẢNG CỬU CHƯƠNG {bang}:")
print("-" * 20)
# In bảng cửu chương từ 1 đến 10
for i in range(1, 11):
ket_qua = bang * i
print(f"{bang} x {i} = {ket_qua}")
# Bonus: In nhiều bảng cùng lúc
print(f"\n🔢 CÁC BẢNG TỪ 1 ĐẾN 5:")
print("-" * 25)
for bang in range(1, 6):
print(f"\nBảng {bang}:")
for i in range(1, 6): # Chỉ in 5 dòng đầu
print(f"{bang} x {i} = {bang * i}")Ví dụ 3: Đếm ngược thời gian
python
# dem_nguoc.py
import time
print("⏰ ĐẾM NGƯỢC THỜI GIAN")
print("=" * 25)
# Nhập thời gian đếm ngược
giay = int(input("Đếm ngược từ (giây): "))
print(f"\n🚀 BẮT ĐẦU ĐẾM NGƯỢC TỪ {giay}:")
# Đếm ngược từ giay về 0
for i in range(giay, 0, -1):
print(f"⏳ {i} giây")
time.sleep(1) # Đợi 1 giây
print("🎉 HẾT GIỜ!")
# Bonus: Đếm ngược theo phút:giây
print(f"\n🕐 ĐẾM NGƯỢC THEO ĐỊNH DẠNG PHÚT:GIÂY")
tong_giay = int(input("Tổng số giây: "))
for i in range(tong_giay, 0, -1):
phut = i // 60
giay = i % 60
print(f"⏰ {phut:02d}:{giay:02d}")
time.sleep(1)
print("⏰ 00:00 - HẾT GIỜ!")🏋️ Thực hành
Bài tập 1: Tạo dãy số theo yêu cầu
Nhiệm vụ: Sử dụng range() tạo các dãy số
python
# 1. Số từ 1 đến 10
print("1-10:", list(range(1, 11)))
# 2. Số lẻ từ 1 đến 20
print("Số lẻ:", list(range(1, 21, 2)))
# 3. Số từ 20 về 1
print("20-1:", list(range(20, 0, -1)))
# 4. Bội số của 5 từ 0 đến 50
print("Bội 5:", list(range(0, 51, 5)))
# 5. Số âm từ -10 đến -1
print("Số âm:", list(range(-10, 0)))Bài tập 2: Tính tổng các số
Nhiệm vụ: Tính tổng với range()
python
# Tính tổng từ 1 đến n
n = int(input("Nhập n: "))
# Cách 1: Dùng range và sum
tong_1 = sum(range(1, n + 1))
# Cách 2: Dùng vòng lặp
tong_2 = 0
for so in range(1, n + 1):
tong_2 += so
print(f"Tổng 1-{n} = {tong_1}")
print(f"Kiểm tra: {tong_2}")
# Công thức toán học
tong_cong_thuc = n * (n + 1) // 2
print(f"Công thức: {tong_cong_thuc}")Bài tập 3: Vẽ hình với range
Nhiệm vụ: Vẽ tam giác số
python
# Vẽ tam giác số
chieu_cao = int(input("Chiều cao tam giác: "))
for i in range(1, chieu_cao + 1):
# In i số đầu tiên
for j in range(1, i + 1):
print(j, end=" ")
print() # Xuống dòng
# Kết quả với chiều cao = 5:
# 1
# 1 2
# 1 2 3
# 1 2 3 4
# 1 2 3 4 5📋 Tóm tắt
Các dạng range() cơ bản:
| Dạng | Cú pháp | Ví dụ | Kết quả |
|---|---|---|---|
| Đơn giản | range(stop) | range(5) | [0, 1, 2, 3, 4] |
| Có start | range(start, stop) | range(2, 6) | [2, 3, 4, 5] |
| Có step | range(start, stop, step) | range(0, 10, 2) | [0, 2, 4, 6, 8] |
| Đếm ngược | range(start, stop, -step) | range(5, 0, -1) | [5, 4, 3, 2, 1] |
Quy tắc quan trọng:
- 📏 Không bao gồm stop: range(1, 5) → [1, 2, 3, 4]
- 🔄 Step mặc định = 1: range(3, 7) = range(3, 7, 1)
- 🎯 Start mặc định = 0: range(5) = range(0, 5)
- ⚡ Lazy evaluation: Chỉ tạo số khi cần
Mẹo sử dụng:
python
# ✅ Dễ đọc
for i in range(len(danh_sach)):
print(i, danh_sach[i])
# ✅ Pythonic hơn
for i, gia_tri in enumerate(danh_sach):
print(i, gia_tri)
# ✅ Kiểm tra range
if 5 in range(1, 10):
print("5 có trong range(1, 10)")Chuẩn bị cho bài tiếp theo:
Bài tiếp theo sẽ học về 🧭 Cú pháp vòng for - cách sử dụng range() trong vòng lặp!
💡 Mẹo: Dùng list(range()) để xem kết quả range() một cách trực quan!
🧾 Thực hành: Thử tạo các dãy số khác nhau để hiểu rõ cách hoạt động của range()!