Practical Programming: An Introduction to Computer Science Using Python is a good beginner's introduction to Computer Science through the Python language because it is accessible to novices, assuming little, if any, prior exposure, but its rather basic coverage does not make it a good choice as either a comprehensive introduction to Python or to programming.
The book does cover many fundamentals such as strings, modules, lists, Boolean logic; repetition, including nested loops; file processing, including web-based data access; sets, algorithms, search and sort, testing using Python's Nose library; it does a great job introducing concepts of object-oriented programming such as classes, methods, encapsulation, polymorphism and inheritance. There are even chapters on GUI, using the Tkinter module, and databases. All of this is covered in an easy to comprehend style, a big plus for a complete beginner.
But Practical Programming is rather brief, coming in at under 400 pages, and therefore it is necessarily basic in its coverage: the chapter on GUI, for example, uses code that has not been modularized in functions and relies on global variables. This approach is useful for very basic examples and small programs but does not prepare the student to build larger GUI applications. And since object-oriented programming concepts have been covered earlier in the book, it seems somewhat strange that GUI discussion does not build on those concepts.
Thinking of GUI, another introductory textbook comes to my mind, an introductory Java programming book by Y. Daniel Liang. That book starts the reader off—in addition to standard command line approach—with Java's GUI, Swing, right away. And it covers GUI in some depth. It would make for a more robust introductory text to see that approach taken here with Python.
One of the other things that Practical Programming also does not do is to present a comprehensive case study that illustrates the concepts covered throughout in the format of a larger application. This lack of an integrative example is the bane of some introductory texts, but it is difficult to gain a larger picture of the concepts and a deeper appreciation of programming without going through an example that brings together many of the concepts discussed separately.
Practical Programming is definitely great for a student in an introductory class who is approaching the subject for the first time. But a reader who wishes to find deeper coverage of concepts or of Python must look elsewhere.