Đề bài: Viết chương trình Python vẽ tam giác Pascal trong Python. Tam giác Pascal có qui tắc sau: Tất cả các giá trị bên ngoài tam giác được xem như là 0. Hàng đầu tiên sẽ là 0 1 0, trong đó chỉ có giá trị 1 có được một khoảng trống trong tam giác Pascal, còn 0 là không nhìn thấy. Hàng thứ hai được tạo bằng cách cộng hai số liên tiếp nhau từ hàng thứ nhất: (0 + 1) và (1 + 0). Các hàng còn lại cũng được tạo
bằng cách cộng như trên. Ví dụ với hàng thứ ba là cộng các số liên tiếp nhau từ hàng thứ hai: (0 + 1), (1 + 1) và (1 + 0). Lời giải: bài tập vẽ tam giác Pascal trong PythonChúng ta sử dụng ba vòng lặp lồng nhau. Một vòng lặp bên ngoài để điều khiển số hàng. Hai vòng lặp bên trong: một vòng lặp để in khoảng trống và một vòng lặp để in giá trị. Dưới đây là chương trình Python để giải bài tập vẽ tam giác Pascal trong Python: def factorial(n): f = 1 while (n > 1): f = f * n n = n - 1 return f def ncr(n, r): return int(factorial(n) / (factorial(n - r) * factorial(r))) n = 6 print("Ve tam giac Pascal:"); for i in range(0, n + 1): for j in range(0, n - i + 1): print("", end = " ") for j in range(0, i + 1): print(" {:<3}".format(ncr(i, j)), end="") print("") Kết quả: Ve tam giac Pascal: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 Hướng dẫn này sẽ dạy bạn cách in tam giác Pascal bằng Python cho một số hàng nhất định. Bạn sẽ bắt đầu bằng cách học cách xây dựng tam giác Pascal. Sau đó, bạn sẽ tiến hành viết một hàm Python và học cách tối ưu hóa nó hơn nữa. ▶ ️ Hãy bắt đầu!
Tam giác Pascal là gì và cách xây dựng nó như thế nào?In hình tam giác Pascal cho một số hàng nhất định là một câu hỏi phỏng vấn phổ biến. Trong tam giác Pascal có n hàng, hàng thứ i có i phần tử. Vì vậy, hàng đầu tiên có một phần tử, và đó là 1. Và mỗi phần tử trong các hàng tiếp theo là tổng của hai số ngay trên nó. Hình sau đây giải thích cách xây dựng tam giác Pascal có năm hàng. Tam giác Pascal cho numRows = 5 (Hình ảnh của tác giả) Lưu ý cách bạn có thể đệm số không khi bạn chỉ có một số bên trên một số nhất định. 📝 Là một bài tập nhanh, hãy làm theo quy trình trên để dựng tam giác Pascal với n = 6 và n = 7. Tiếp theo, chúng ta hãy tiến hành viết một số mã. Bạn có thể chọn chạy các đoạn mã trên Python IDE của techpoe.com ngay từ trình duyệt của mình— khi bạn thực hiện theo cách của mình thông qua hướng dẫn. Trong phần này, chúng ta hãy viết một hàm Python để in tam giác Pascal với bất kỳ số hàng nhất định nào. Có hai câu hỏi chính cần xem xét:
Hãy trả lời chúng ngay bây giờ. # 1. Biểu thức cho mỗi mục nhập trong tam giác Pascal là gì? Điều đó xảy ra là các mục trong tam giác Pascal có thể được lấy bằng công thức cho nCr. Nếu bạn nhớ lại từ môn toán ở trường của mình, nCr biểu thị số cách bạn có thể chọn r mục từ tập hợp n mục. Công thức cho nCr được đưa ra dưới đây: công thức nCr (Hình ảnh của tác giả) Bây giờ chúng ta hãy tiến hành biểu diễn các mục trong tam giác Pascal bằng công thức nCr. Các mục nhập tam giác Pascal sử dụng nCr (Hình ảnh của tác giả)Bây giờ chúng tôi đã tìm ra một cách để thể hiện các mục nhập trong ma trận. # 2. Làm thế nào để điều chỉnh khoảng cách khi in mẫu? Trong tam giác Pascal với numRows, hàng số 1 có một mục nhập, hàng số 2 có hai mục nhập, v.v. Để in mẫu dưới dạng hình tam giác, bạn sẽ cần numRows – i khoảng trắng trong hàng #i. Và bạn có thể sử dụng hàm phạm vi của Python kết hợp với vòng lặp for để thực hiện điều này. Vì hàm phạm vi loại trừ điểm cuối theo mặc định, hãy đảm bảo thêm + 1 để nhận được số khoảng trắng đầu cần thiết. Bây giờ bạn đã học cách biểu diễn các mục nhập và cũng như cách điều chỉnh không gian trong khi in tam giác Pascal, hãy tiếp tục và định nghĩa hàm pascal_tri. Phân tích cú pháp định nghĩa hàmVậy bạn muốn hàm pascal_tri làm gì?
Để tính giai thừa, hãy sử dụng chức năng giai thừa từ mô-đun toán học tích hợp sẵn của Python. ▶ ️ Chạy ô mã sau để nhập giai thừa và sử dụng nó trong mô-đun hiện tại của bạn. from math import factorial Đoạn mã bên dưới chứa định nghĩa hàm. def pascal_tri(numRows): '''Print Pascal's triangle with numRows.''' for i in range(numRows): # loop to get leading spaces for j in range(numRows-i+1): print(end=" ") # loop to get elements of row i for j in range(i+1): # nCr = n!/((n-r)!*r!) print(factorial(i)//(factorial(j)*factorial(i-j)), end=" ") # print each row in a new line print("n") Chức năng hoạt động như sau:
🔗 Như chúng tôi đã thêm một docstring, bạn có thể sử dụng hàm trợ giúp tích hợp của Python hoặc thuộc tính __doc__ để truy cập vào chuỗi doc của hàm. Đoạn mã dưới đây cho biết cách thực hiện. help(pascal_tri) # Output Help on function pascal_tri in module __main__: pascal_tri(numRows) Print Pascal's triangle with numRows. pascal_tri.__doc__ # Output Print Pascal's triangle with numRows. Bây giờ chúng ta hãy tiếp tục và gọi hàm với số hàng là đối số. pascal_tri(3) # Output 1 1 1 1 2 1 3 hàng đầu tiên của tam giác Pascal được in ra, như mong đợi. In tam giác Pascal bằng phép đệ quyTrong phần trước, chúng ta đã xác định được biểu thức toán học của từng mục nhập trong Tam giác Pascal. Tuy nhiên, chúng tôi đã không sử dụng mối quan hệ giữa các mục nhập trong hai hàng liên tiếp. Trên thực tế, chúng tôi đã sử dụng hàng trước đó để tính toán các mục trong hàng tiếp theo. Chúng ta có thể không sử dụng điều này và đưa ra cách triển khai đệ quy của hàm pascal_tri không? Được rồi hãy làm vậy đi! Trong một triển khai đệ quy, một hàm liên tục gọi chính nó cho đến khi đáp ứng trường hợp cơ sở. Trong việc xây dựng tam giác Pascal, chúng ta bắt đầu với hàng đầu tiên với một mục nhập 1, sau đó xây dựng các hàng tiếp theo. Vì vậy, hàm gọi tới pascal_tri (numRows) lần lượt gọi tới pascal_tri (numRows-1) và cứ tiếp tục như vậy cho đến khi đạt đến trường hợp cơ sở pascal_tri (1). Hãy xem xét ví dụ mà bạn cần in 3 hàng đầu tiên của tam giác Pascal. Hình ảnh sau đây giải thích cách các lệnh gọi đệ quy được đẩy vào ngăn xếp. Và cách gọi hàm đệ quy trả về các hàng của tam giác Pascal. Ngăn xếp cuộc gọi trong các cuộc gọi đệ quy (Hình ảnh của tác giả)▶ ️ Chạy đoạn mã dưới đây để tạo một cách đệ quy các hàng của tam giác Pascal. def pascal_tri(numRows): '''Print Pascal's triangle with numRows.''' if numRows == 1: return [[1]] # base case is reached! else: res_arr = pascal_tri(numRows-1) # recursive call to pascal_tri # use previous row to calculate current row cur_row = [1] # every row starts with 1 prev_row = res_arr[-1] for i in range(len(prev_row)-1): # sum of 2 entries directly above cur_row.append(prev_row[i] + prev_row[i+1]) cur_row += [1] # every row ends with 1 res_arr.append(cur_row) return res_arr Dưới đây là một số điểm đáng lưu ý:
Vì mảng được trả về là một danh sách lồng nhau (danh sách các danh sách), chúng ta cần điều chỉnh khoảng cách và in ra các mục nhập, như được hiển thị trong ô mã bên dưới. tri_array = pascal_tri(5) for i,row in enumerate(tri_array): for j in range(len(tri_array) - i + 1): print(end=" ") # leading spaces for j in row: print(j, end=" ") # print entries print("n") # print new line Đầu ra là chính xác, như được thấy bên dưới! # Output 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Hàm Python để in Tam giác Pascal cho numRows ≤ 5Cả hai phương pháp mà bạn đã học sẽ hoạt động để in tam giác Pascal với một số lượng hàng numRows tùy ý. Tuy nhiên, đôi khi bạn cần in tam giác Pascal với số lượng hàng nhỏ hơn. Và khi số hàng bạn cần in nhiều nhất là 5 – bạn có thể sử dụng một kỹ thuật đơn giản. Đi qua hình bên dưới. Và quan sát cách lũy thừa của 11 giống với các mục trong tam giác Pascal. Ngoài ra, hãy lưu ý rằng điều này chỉ hoạt động đến lũy thừa thứ 4 của 11. Tức là, 11 được nâng lên lũy thừa {0, 1, 2, 3, 4} cho các mục từ hàng 1 đến hàng 5 của tam giác Pascal. Hãy viết lại định nghĩa hàm, như hình dưới đây: def pascal_tri(numRows): '''Print Pascal's triangle with numRows.''' for i in range(numRows): print(' '*(numRows-i), end='') # compute power of 11 print(' '.join(str(11**i))) Đây là cách hàm pascal_tri hoạt động:
Hãy kiểm tra xem chức năng có hoạt động như dự định không. pascal_tri(5) # Output 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 Ví dụ khác, hãy gọi hàm pascal_tri với 4 làm đối số. pascal_tri(4) # Output 1 1 1 1 2 1 1 3 3 1 Tôi hy vọng bạn biết cách bạn có thể dễ dàng in tam giác Pascal cho numRows trong phạm vi từ 1 đến 5. Sự kết luậnĐây là những gì chúng tôi đã học được:
Nếu bạn đang muốn nâng cao kỹ năng Python, hãy học cách nhân ma trận, kiểm tra xem một số có phải là số nguyên tố hay không và giải quyết các vấn đề về các phép toán chuỗi. Chúc bạn viết mã vui vẻ! |