Tim Chase: > It still doesn't solve the aforementioned problem > of things like ')))(((' which is balanced, but psychotic. :)
This may solve the problem: def balanced(txt): d = {'(':1, ')':-1} tot = 0 for c in txt: tot += d.get(c, 0) if tot < 0: return False return tot == 0 print balanced("42^((2x+2)sin(x)) + (log(2)/log(5))") # True print balanced("42^((2x+2)sin(x) + (log(2)/log(5))") # False print balanced("42^((2x+2)sin(x))) + (log(2)/log(5))") # False print balanced(")))(((") # False A possibile alternative for Py 2.5. The dict solution looks better, but this may be faster: def balanced2(txt): tot = 0 for c in txt: tot += 1 if c=="(" else (-1 if c==")" else 0) if tot < 0: return False return tot == 0 Bye, bearophile -- http://mail.python.org/mailman/listinfo/python-list