Em hãy viết chương trình nhập vào một xâu kí tự chỉ gồm các dấu mở ngoặc và đóng ngoặc sau [, ], {, }, (, ). Sau đó, kiểm tra xem xâu kí tự đó có cân bằng hay không...

1. MỤC ĐÍCH CỦA DỰ ÁN HỌC TẬP

2. YÊU CẦU CHUNG

3. MỘT SỐ HƯỚNG DẪN VÀ GỢI Ý THỰC HIỆN DỰ ÁN

4. TIÊU CHÍ ĐÁNH GIÁ

Yêu cầu dự án 1: 

a) Em hãy viết chương trình nhập vào một xâu kí tự chỉ gồm các dấu mở ngoặc và đóng ngoặc sau [, ], {, }, (, ). Sau đó, kiểm tra xem xâu kí tự đó có cân bằng hay không. In ra màn hình thông báo “Cân bằng” nếu xâu đó là cân bằng, ngược lại in ra “Không cân bằng”. 

b) Mở rộng chương trình ở câu a): đọc tập có tên test.py chứa chương trình viết bằng ngôn ngữ Python, và kiểm tra xem chương trình có lỗi cú pháp về thứ tự xuất hiện của các cặp ngoặc [, ], {, }, (, ) hay không. In ra màn hình thông báo “Không có lỗi” nếu chương trình không có lỗi về các cặp ngoặc này, ngược lại in ra “Có lỗi cú pháp”.


a) Kiểm tra xâu kí tự có cân bằng hay không

def is_balanced(s):

    stack = []

    opening = {'(', '{', '['}

    closing = {')': '(', '}': '{', ']': '['}

    for char in s:

        if char in opening:

           stack.append(char)

        elif char in closing:

            if not stack or stack[-1] != closing[char]:

                return "Không cân bằng"

           stack.pop()

    return "Cân bằng" if not stack else “Không cân bằng”

# Test the function

s = "[{()}]()"

print(is_balanced(s)) 

# Output: Cân bằng

b) Kiểm tra lỗi cú pháp trong file test.py

def check_syntax_balance(filename):

    try:

        with open(filename, 'r') as file:

            content = file.read()

    except FileNotFoundError:

        return “Không thể mở file”

    stack = []

    opening = {'(', '{', '['}

    closing = {')': '(', '}': '{', ']': '['}

    for char in content:

        if char in opening:

           stack.append(char)

        elif char in closing:

            if not stack or stack[-1] != closing[char]:

                return "Có lỗi cú pháp"

           stack.pop()

    return "Không có lỗi" if not stack else “Có lỗi cú pháp”

# Test the function with a sample file name

filename = 'test.py'

print(check_syntax_balance(filename)) 

# Output will depend on the content of test.py

  • Giải thích
  1. Hàm is_balanced(s):
    • Khởi tạo một ngăn xếp rỗng.
    • Duyệt từng ký tự trong xâu.
    • Nếu ký tự là dấu mở ngoặc, đẩy nó vào ngăn xếp.
    • Nếu ký tự là dấu đóng ngoặc, kiểm tra ngăn xếp:
      • Nếu ngăn xếp rỗng hoặc dấu mở ngoặc ở đỉnh ngăn xếp không khớp với dấu đóng ngoặc hiện tại, xâu không cân bằng.
      • Nếu khớp, bỏ dấu mở ngoặc ở đỉnh ngăn xếp.
    • Sau khi duyệt hết xâu, nếu ngăn xếp rỗng, xâu cân bằng; ngược lại, không cân bằng.
  2. Hàm check_syntax_balance(filename):
    • Mở và đọc nội dung của file.
    • Thực hiện kiểm tra tương tự như trong hàm is_balanced(s).
    • In ra "Không có lỗi" nếu tất cả các cặp ngoặc đều khớp và ngăn xếp rỗng, ngược lại in ra "Có lỗi cú pháp".

Các hàm này đảm bảo kiểm tra cân bằng của các cặp ngoặc trong xâu kí tự và trong một file Python một cách hiệu quả.


Bình luận

Giải bài tập những môn khác