Yêu cầu: in m bội số của n (n, 2n, 3n, ..., m*n) KHÔNG dùng for/while loop. Sử dụng range() với step.
Cơ chế range()
range(start, stop, step) # start: bao gồm # stop: KHÔNG bao gồm # step: bước nhảy
Ví dụ range cơ bản
print(list(range(2, 10, 2))) # [2, 4, 6, 8] print(list(range(1, 10))) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
Áp dụng: m bội số của n
Bội số thứ i: i * n. Dãy: n, 2n, 3n, ..., m*n.
- start = n
- stop = n * m + 1 (vì stop không bao gồm)
- step = n
n = 4 m = 5 multiples = range(n, n * m + 1, n) print(list(multiples)) # [4, 8, 12, 16, 20]
Giải thích
range(4, 21, 4)sinh: 4, 8, 12, 16, 20 (dừng trước 21).rangeobject lazy, không tạo list trong bộ nhớ cho đến khilist()hoặc iteration.- Hiệu năng O(1) không gian (trước khi materialize).
Mở rộng
# In trực tiếp không tạo list
for x in range(n, n*m+1, n):
print(x, end=' ')
# Hoặc unpack (Python 3.5+)
print(*range(n, n*m+1, n)) # 4 8 12 16 20Kết luận
range(start, stop, step) là công cụ mạnh để sinh dãy số等差数列 mà không cần loop explicit. Pythonic, hiệu quả bộ nhớ.