On Jun 17, 8:43 am, Chris <[EMAIL PROTECTED]> wrote: > On Jun 17, 5:50 am, [EMAIL PROTECTED] wrote: > > > > > I'm writing to see calcuration process. > > And so, I can't catch StopIteration... > > > What is mistake? > > > def collatz(n): > > r=[] > > while n>1: > > r.append(n) > > n = 3*n+1 if n%2 else n/2 > > yield r > > > for i, x in enumerate(collatz(13)): > > try: > > last = x[:i+1] > > print x[:i+1] > > except StopIteration: > > print last.appnd(1) > > > Output: > > [13] > > [13, 40] > > [13, 40, 20] > > [13, 40, 20, 10] > > [13, 40, 20, 10, 5] > > [13, 40, 20, 10, 5, 16] > > [13, 40, 20, 10, 5, 16, 8] > > [13, 40, 20, 10, 5, 16, 8, 4] > > [13, 40, 20, 10, 5, 16, 8, 4, 2] > > last.appnd(1) <= [13, 40, 20, 10, 5, 16, 8, 4, 2, 1] # i want this > > list > > def collatz(n): > r=[] > while n>1: > r.append(n) > n = 3*n+1 if n%2 else n/2 > yield r > > i = 1 > while 1: > try: > last = x[:i] > print x[:i] > i += 1 > except StopIteration > last.append(1) > break > > You will have to control the for loop yourself otherwise the > StopIteration is handled for you.
forgot to put x = collatz(13) before the while loop starts and a x.next() inside the while, but hopefully you get the point :p -- http://mail.python.org/mailman/listinfo/python-list