The 1st edition of Dierbach's "Introduction to Programming using Python" provides chapters divided into sections where concepts are taught first "generically" with specific syntax following. Furthermore, extensive examples, programming assignments and end of chapter capstone assignments provide plenty of practice for problem solving. A "Beginner's Programming Guide" provides a quick online reference. Interactive versions of all program examples online provide additional support for learning.
Better than the O'reilly series for beginners, suitable for uni Year Ones to recap the learnings, find the illustrations, examples, short histories quite intriging. The writer has put thoughts on how to present coding in an interesting way. Also, it would emphase some error-pron part, like, for list, when you set the range(1,11) to print will get 1-10 only.