Palm Tree wrote: > hi all. i'm trying to write a simple program. i'm using python 3.4 > > let us say i have > > s="2*3+3(8-4(5+6+9))+2+3+3(4/4)" > > i want to find expression enclosed in brackets. > > i want outputs to be like: > (8-4(5+6+9)) > (5+6+9) > (4/4) > note : i'd like an answer involving recursion if possible
No recursion, but a stack managed manually: >>> s = "2*3+3(8-4(5+6+9))+2+3+3(4/4)" >>> stack = [] >>> for i, c in enumerate(s): ... if c == "(": ... stack.append(i) ... elif c == ")": ... print(s[stack.pop():i+1]) ... (5+6+9) (8-4(5+6+9)) (4/4) The order is determined by the closing parenthesis, you could sort if you don't want that. I did not find a convincing translation using recursion, but I'll give one anyway: def find_closing(s): i = c = None pairs = enumerate(s) def step(start=None): nonlocal i, c for i, c in pairs: if c == "(": step(i) elif c == ")": if start is not None: print(s[start:i+1]) return step() _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor