Given the state of the whole 2 vs. 3 debate, I'm always surprised that libaries and books don't post their requirements or used versions more prominently.
Although I do spot a couple really "non-standard" practice, for example, the classes still using the old Python 2 syntax:
class Name: vs class Name(object):
Imagine having to write `extends Object` for every Java class you make.
You’re a new coder. You’re interested in learning how to code, not just syntax. You’re sick of monkey-see, monkey-do types of tutorials.
Let’s set your teeth into some real coding. Your hand will be held in the beginning, but as you progress you’ll see yourself approaching the projects more comfortably.
 - http://newcoder.io/
This is a collection of real applications that are written in 500 lines or less. The goal is to teach python through real projects that are not too complicated to understand.
Hope this helps.
You'll learn a lot along the way and you'll then know exactly what you need to focus on more if it totally doesn't work, but you'll likely find enough success in whatever it is that you'll be very motivated to build v2 learning from all your mistakes along the way :)
In general, if you use recursion in python, you're gonna have a bad time. Better to use an iterator (which is usually more memory efficient anyway because you're not slurping up the whole thing...).
Of course, you can always hack it and sys.setrecursionlimit, but WHY WOULD YOU DO THIS. https://docs.python.org/2/library/sys.html#sys.setrecursionl...
Python2 - http://pymbook.readthedocs.org/en/latest/
Python3 - http://pymbook.readthedocs.org/en/py3/