Skip to content

🧾 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, 4

2. 📏 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ạngCú phápVí dụKết quả
Đơn giảnrange(stop)range(5)[0, 1, 2, 3, 4]
Có startrange(start, stop)range(2, 6)[2, 3, 4, 5]
Có steprange(start, stop, step)range(0, 10, 2)[0, 2, 4, 6, 8]
Đếm ngượcrange(start, stop, -step)range(5, 0, -1)[5, 4, 3, 2, 1]

Quy tắc quan trọng:

  1. 📏 Không bao gồm stop: range(1, 5) → [1, 2, 3, 4]
  2. 🔄 Step mặc định = 1: range(3, 7) = range(3, 7, 1)
  3. 🎯 Start mặc định = 0: range(5) = range(0, 5)
  4. ⚡ 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()!

🐍 Khóa học Python căn bản bằng tiếng Việt