Python the hard way, upto exercise 10