forked from learning-zone/python-basics
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathhas_balanced_brackets.py
53 lines (39 loc) · 1.52 KB
/
has_balanced_brackets.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import unittest
def has_balanced_brackets(phrase):
"""Does a given string have balanced pairs of brackets?
Given a string as input, return True or False depending on whether the
string contains balanced (), {}, [], and/or <>.
"""
brackets = {
']': '[',
'}': '{',
'[': '[',
'>': '<',
')': '('
}
open_brackets = set(['[', '{', '[', '<', '('])
close_brackets = set([']', '}', ']', '>', ')'])
seen = []
for let in phrase:
if let in open_brackets:
seen.append(let)
if let in close_brackets:
if seen != [] and brackets[let] == seen[-1]:
seen.pop()
else:
return False
if seen == []:
return True
class test_solutions(unittest.TestCase):
def test_has_balanced_brackets(self):
self.assertTrue(has_balanced_brackets("<ok>"))
self.assertTrue(has_balanced_brackets("<[ok]>"))
self.assertTrue(has_balanced_brackets("<[{(yay)}]>"))
self.assertTrue(has_balanced_brackets("No brackets here!"))
self.assertFalse(has_balanced_brackets("(Oops!){"))
self.assertFalse(has_balanced_brackets("{[[This has too many open square brackets.]}"))
self.assertFalse(has_balanced_brackets(">"))
self.assertFalse(has_balanced_brackets("(This has {too many} ) closers. )"))
self.assertFalse(has_balanced_brackets("<{Not Ok>}"))
if __name__ == "__main__":
unittest.main()