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

Reply via email to