编写一个函数,该函数遍历文本文件,并确定文件是否有正确的圆括号,即是否所有圆括号,方括号等都用相同类型的字符封闭,以及圆括号,方括号 和大括号正确嵌套。
时间: 2024-05-10 18:19:34 浏览: 5
可以使用栈来解决这个问题。我们可以遍历文件中的每个字符,如果字符是左括号,我们将其推入栈中;如果字符为右括号,则将栈顶元素弹出并检查它是否与当前字符匹配。如果匹配,则继续遍历文件;否则,文件中的括号不是正确的。
下面是一个实现该函数的Python代码:
```python
def check_parentheses(file_path):
stack = []
openers = {'(': ')', '[': ']', '{': '}'}
closers = {')', ']', '}'}
with open(file_path, 'r') as f:
for line_num, line in enumerate(f, 1):
for char_num, char in enumerate(line, 1):
if char in openers:
stack.append(char)
elif char in closers:
if not stack:
print(f'Error on line {line_num}, character {char_num}: '
f'unmatched closing bracket {char}')
return False
opener = stack.pop()
if openers[opener] != char:
print(f'Error on line {line_num}, character {char_num}: '
f'mismatched brackets {opener} and {char}')
return False
if stack:
print('Error: unclosed brackets')
return False
return True
```
该函数首先定义了一个栈和两个字典分别存储开放符号和关闭符号。然后,它打开文件并逐个字符遍历文件。对于每个左括号,将其推入栈中。对于每个右括号,它会检查栈是否为空。如果栈为空,则这个右括号没有匹配项,因此返回False。否则,它会弹出栈顶元素并检查它是否与当前字符匹配。如果没有匹配,则返回False。最后,如果还有未关闭的括号,则返回False;否则,返回True。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)