Bài Tập Python: In Bảng Cửu Chương
Bài Tập Python: In Bảng Cửu Chương

Tại sao bài In Bảng Cửu Chương quan trọng?

  • Vòng lặp (loop) là trái tim của mọi tác vụ tự động hóa. In bảng cửu chương là bài tập “vỡ lòng” kinh điển để hiểu cách máy tính lặp lại công việc.

  • Bạn sẽ học được cách kiểm soát luồng chạy (control flow), làm chủ hàm range() và định dạng văn bản đẹp mắt.

  • Không chỉ in ra số, bạn sẽ biết cách viết code chuẩn, xử lý lỗi nhập liệu và tối ưu hiển thị.

Tóm tắt nội dung

  • Phân tích logic vòng lặp và hàm range.

  • Giải pháp cơ bản với for.

  • Giải pháp nâng cao: Validate dữ liệu và in bảng cửu chương tổng hợp.

  • Phân tích độ phức tạp thuật toán.

  • Checklist tránh lỗi Off-by-one thường gặp.

Bạn xem thêm:


1. Đề bài 

Mô tả:

Viết chương trình nhận vào một số nguyên dương n từ bàn phím. Chương trình sẽ in ra bảng cửu chương tương ứng với số n đó (từ n x 1 đến n x 10).

Input:

  • Một số nguyên n.

Output:

  • 10 dòng, mỗi dòng có định dạng: n x i = result.

Constraints:

  • Đầu vào thường là 1 <= n <= 9 (nhưng code cần chạy đúng với mọi số nguyên).

  • Thời gian chạy: Giới hạn 1s.

Ví dụ 1:

Input:
5

Output:
5 x 1 = 5
5 x 2 = 10
...
5 x 10 = 50

2. Phân tích tư duy 

Logic vòng lặp

Để in bảng cửu chương của n, ta cần thực hiện một hành động lặp đi lặp lại 10 lần: Nhân n với một biến chạy i (tăng dần từ 1 đến 10).

Trong Python, hàm range(start, stop) là công cụ chính:

  • range(1, 10) -> Chỉ chạy từ 1 đến 9 (Thiếu số 10).

  • range(1, 11) -> Chạy từ 1 đến 10 (Đúng).

Công thức tổng quát

Result = n x i

(Với i chạy từ 1 đến 10)

Edge cases (Trường hợp biên)

  • Số âm: Logic nhân vẫn đúng (ví dụ: -5 x 1 = -5).

  • Số 0: Kết quả toàn là 0.

  • Nhập chữ: Chương trình sẽ crash nếu không ép kiểu (int).


3. Giải pháp 1: 

Sử dụng vòng lặp for kết hợp với f-string (tính năng format chuỗi mạnh mẽ của Python 3.6+).

Độ phức tạp:

  • Time Complexity: O(1) – Vì vòng lặp luôn chạy cố định 10 lần, không phụ thuộc độ lớn của n. (Nếu in đến k lần thì là O(k)).

  • Space Complexity: O(1) – Chỉ dùng biến lưu trữ đơn giản.

# Solution 1: Basic For Loop with f-string
def print_multiplication_table():
    try:
        # 1. Nhập dữ liệu và ép kiểu số nguyên
        n_input = input().strip() # Đọc input
        n = int(n_input)          # Ép kiểu int

        # 2. Vòng lặp từ 1 đến 10
        # Lưu ý: range(1, 11) sẽ sinh ra các số 1, 2, ..., 10
        for i in range(1, 11):
            result = n * i
            # 3. In ra màn hình với f-string
            print(f"{n} x {i} = {result}")

    except ValueError:
        print("Lỗi: Vui lòng nhập một số nguyên hợp lệ.")

# Chạy chương trình
if __name__ == "__main__":
    print_multiplication_table()

4. Biến thể nâng cao

Biến thể 1: Đảm bảo Input đúng 

Người dùng có thể nhập sai (nhập chữ “a”, nhập dấu cách…). Ta dùng vòng lặp while True để bắt nhập lại cho đến khi đúng.

Code gợi ý:

def get_valid_integer():
    while True:
        try:
            n = int(input("Nhập số muốn in bảng cửu chương: "))
            return n
        except ValueError:
            print("Không phải số! Vui lòng nhập lại.")

# Sau đó gọi hàm này và chạy vòng for như Solution 1

Biến thể 2: In bảng cửu chương tổng hợp 

Mở rộng bài toán: In toàn bộ bảng cửu chương từ 2 đến 9 (dạng lưới). Đây là bài tập luyện vòng lặp lồng nhau (Nested Loop).

Tư duy:

  • Vòng lặp ngoài (i): Đại diện cho các số từ 2 đến 9.

  • Vòng lặp trong (j): Đại diện cho số nhân từ 1 đến 10.

Code gợi ý (Format dạng cột):

# In bảng cửu chương từ 2 đến 9
for i in range(1, 11):       # Dòng (số nhân)
    for j in range(2, 10):   # Cột (bảng số mấy)
        # Sử dụng \t (tab) để căn chỉnh cột, end='' để không xuống dòng
        print(f"{j} x {i} = {j*i}\t", end='') 
    print() # Xuống dòng sau khi in hết 1 hàng ngang

5. Lỗi thường gặp 

Checklist:

  • [x] Đã dùng range(1, 11) thay vì range(1, 10) chưa?

  • [x] Đã xử lý ngoại lệ ValueError khi input không phải số chưa?

  • [x] Format output có đúng dấu cách và cấu trúc đề bài yêu cầu không?

  • [x] Tên biến (n, i) có dễ hiểu trong ngữ cảnh ngắn gọn này không?

Lỗi “Ngớ ngẩn” (Off-by-one error):

Rất nhiều bạn mới học viết range(10).

  • range(10) -> chạy từ 0 đến 9.

  • Kết quả in ra sẽ bắt đầu từ n x 0 = 0 và thiếu n x 10.

    -> Khắc phục: Luôn nhớ tham số stop trong rangeexclusive (không bao gồm).


6. FAQ – Câu hỏi thường gặp

1. Làm sao để in bảng cửu chương Python ngược (từ 10 về 1)?

Bạn có thể dùng hàm range() với bước nhảy âm: range(10, 0, -1). Đây là cách tùy biến in bảng cửu chương Python linh hoạt.

2. f"{n} x {i}" là gì? Tôi dùng Python bản cũ được không?

Đây là f-string Python (có từ Python 3.6). Nếu dùng bản cũ, bạn phải dùng format() hoặc toán tử %: print("%d x %d = %d" % (n, i, n*i)). Tuy nhiên, nên học f-string vì nó chuẩn và dễ đọc nhất.

3. Tại sao tôi nhập số xong chương trình tắt ngay (trên Windows)?

Đây là vấn đề môi trường chạy, không phải lỗi bài tập Python cơ bản. Hãy thêm dòng input("Nhấn Enter để thoát...") ở cuối code để giữ cửa sổ console.

4. Làm sao in kết quả thẳng hàng đẹp mắt (định dạng chuỗi Python)?

Bạn có thể dùng cú pháp format width trong f-string. Ví dụ: {result:2} sẽ dành 2 khoảng trống cho kết quả, giúp các số 1 chữ số và 2 chữ số thẳng hàng.

5. Có cách nào viết code bảng cửu chương ngắn hơn không (code python ngắn gọn)?

Có, dùng List Comprehension: [print(f"{n} x {i} = {n*i}") for i in range(1, 11)]. Nhưng cách này không được khuyến khích trong thực tế (bad practice) vì khó debug.

6. Tôi muốn học thêm về vòng lặp, tài liệu nào tốt cho người mới (học python cho người mới)?

Hãy tập trung thực hành vòng lặp for Pythonwhile loop Python qua các bài toán tính tổng, tính giai thừa trước khi sang cấu trúc dữ liệu.

7. Sự khác nhau giữa forwhile trong bài này (cấu trúc lặp Python)?

for dùng khi biết trước số lần lặp (10 lần). while dùng khi điều kiện lặp chưa xác định rõ (ví dụ: bắt nhập lại đến khi đúng). Bài này dùng for là tối ưu nhất cho logic chính.

8. Làm sao in bảng cửu chương ra file văn bản thay vì màn hình?

Bạn dùng hàm open() kết hợp file.write(). Logic tạo chuỗi python multiplication table vẫn giữ nguyên, chỉ đổi nơi xuất dữ liệu.

9. Thời gian chạy của thuật toán này là bao nhiêu?

Với n bất kỳ, vòng lặp chạy đúng 10 lần. Độ phức tạp là hằng số O(1). Máy tính xử lý việc này trong tích tắc (< 0.0001s).


7. Bài tập tương tự

Nếu đã làm chủ bài này, hãy thử thách bản thân:

  1. Vẽ hình tam giác: Sử dụng vòng lặp lồng nhau để in tam giác sao (*).

  2. Kiểm tra số nguyên tố: Kết hợp vòng lặp và điều kiện if.

  3. Trò chơi đoán số: Máy chọn số ngẫu nhiên, bạn đoán và máy gợi ý lớn/nhỏ hơn (dùng while).

Các khóa học liên quan: 

Một số sản phẩm từ Python:

Một số sách lập trình Python bạn hãy tham khảo

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *