On 18/11/14 09:24, Jason Y wrote:
With these images, I'm attempting to create a gif by resizing an image
(a 001.jpg) 10 times and than use a recursive function that should use
the next image (a 002.jpg) and resize that 10 times, etc...; until it
reaches "a 721.jpg", where it should stop.

Don't use recursion for this, use a loop.

Recursion is great for some things in python but its not great
as a loop substitute for more than a few items. You are likely
to run into memory limits using recursion. Use a loop when you
want to repeat things. And from your description, a while loop
looks like the right choice:

while nextNumber < 721:  # maybe?



I'm also sure there are plenty of errors or inefficiency in this code.
This will run; however, it will not go on to the next image. I've tried
a few things to manipulate the string "a 001.jpg".
Anyone?

from PIL import Image
s = ("a 001.jpg")
im = Image.open(s)
def main(im):

Use a more meaningful function name then call that function
from main() if you feel you must have a main().
Its not compulsory though, but meaningful function names
make the code more readable and reusable.

     try:
         x = 920
         y = 80
         for a in range(0,10):
             x += 100
             y += 100
             box = (x,y)
             im = im.resize(box)
             im.show()
         s = list(s)

You don;t need to convert the string to a list, you can access the characters by indexing just like you do with lists.

         if s[4] < 9:
             s[4] = int(s[4]) + 1

Notice that you are replacing a character with a number.

         elif s[4] == 9:
             s[4] = 0
s[3] = int(s[3]) + 1
         elif s[3] < 9:
s[3] = int(s[3]) + 1
         elif s[3] == 9:
             s[3] = 0
s[2] = int(s[2]) + 1
         elif s[2] < 9:
s[2] = int(s[2]) + 1
         elif s[2] == 9:
             s[2] = 0
         s = ''.join(s)

You camn't join numbers in a string.
This would throw a TypeError but you can't see it because
you've hidden your errors, see below...

However, you can probably replace all of that using slices

nextNumber = int(s[2:5]) + 1
nextFile = s[:2]+str(nextNumber)+s[5:]

         im = Image.open(s)
         return main(im)

see above re using a while loop rather than recursion.

     except:
         return -1

Don't do this. It hides every error message. You have no
idea why your code fails because you can't see the cause
of failure. That's a bad thing.


--
Alan G
Author of the Learn to Program web site
http://www.alan-g.me.uk/
http://www.amazon.com/author/alan_gauld
Follow my phopto-blog on Flickr at:
http://www.flickr.com/photos/alangauldphotos


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to