Strings are immutable, so your method of slicing one letter at time
will be building lots of them. That shouldn't hurt you here, but it
will when you hit a bigger problem. In the i() there should be "return
op == 0" on the end.
def well(expr):
mapping = {'(':1, ')':-1}
count = 0
for s in expr:
if s in mapping:
count += mapping[s]
if s < 0:
return False
return count == 0
def test_well():
examples = [
('zx4er(1(er(Yy)ol)ol)ik', True),
('x(x)x(x(x)xx(xx(x)x(x(x)xx)(xxxx))x(x(x)xx)(xxxx)x)(xxxx)',
True),
('a(ty(y(y(bn)))lokl)kl', True),
('xc(er(tgy(rf(yh)()uj)ki))', True),
('e', True),
('rf(tgt)juj)jkik(jun)', False),
('zx(4er(1(er(Yy)ol)ol)ik', False),
]
for expr, expected in examples:
assert well(expr) == expected
--
http://mail.python.org/mailman/listinfo/python-list