I use Django, and I have an in depth knowledge of the framework. It has done pretty much all the hard work, so its a case of understanding its high level concepts and plugging them, together, rather than being able to implement every one of its features myself.
Whats going to be more use in the real world? Knowing how to use Django's reverse function, or being able to write my own in less than an hour?
Don't be discouraged, though -- to gather certain kinds of experience you have to go into 'proper' programming. As long as you're open to questioning your assumptions and current state of knowledge, you stand to improve :)
Consider question #4 - there's no single correct way to indicate `underflow' condition. You could raise an exception, return zero, return negative value... it's all about considering and picking trade-offs, knowing convetions and matching client (caller) code.
Consider question #5 - while certainly you can provide your worst FizzBuzz, a programmer with different experience would probably provide a much different, perhaps even worse example [1]. As author notes, the 5th question is about experience with ineffective, brain-damaged, ugly, unmaintainable etc. code.
[1] speaking of some really insidious code: http://underhanded.xcott.com/
Now, I should say in advance that my colleague is very talented and not everybody can do what he did. You will notice, though, that he spent several years before he was able to make the jump. He's now a full stack developer and a good one at that.
It is hard to give good advice because there are probably people who will hire you (at very low pay) even with as little experience as you have. You can then spend time working to improve on somebody else's dime. On the other hand, it will be very stressful because you will have a literal mountain to climb and you may even cause the failure of projects without realizing it.
I think ideally, I would spend a considerable amount of time working on real projects on your own, spending 3-4 hours a day average. After a few years you will probably be more accomplished than many new grads out of university.
The other approach is to go to school and get a degree. It is expensive (in time as well as money), but that piece of paper is worth its weight in gold at the beginning of your career.
Whatever you do, good luck! Try to understand that it will be 10-20 years before you even realize how much you suck, so never give up trying to improve yourself :-) The only people who I've met who were not embarrassed about how bad they were at the beginning of their career are people who are still bad at their job.
I find great joy in programming but I'm also grappling with the fact that I work in a well paid tech field (online marketing) and that the market for coders in the UK isn't great, especially for a (maybe) entry level Python coder. Could I conscience taking a £25,000 pay cut to code? Unfortunately I'm not sure I could.
It will take a long time (years as I said), but you can get there eventually if you want. The best way is to just build personal projects that you actually want. I would stay away from the toy problems after you have a basic grasp of the concepts and just learn along the way. You will need to go back to the toy problems to polish certain skills, but you should finding out what you need to work on from your every day coding.
Good luck!