Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

In m bội số đầu tiên của n không dùng vòng lặp (Python)

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).
  • range object lazy, không tạo list trong bộ nhớ cho đến khi list() 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 20

Kế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ớ.