The Practice of Computing Using Python, Global Edition
معرفی کتاب «The Practice of Computing Using Python, Global Edition» نوشتهٔ Enbody, Richard J.; Punch, William F، منتشرشده توسط نشر Pearson Higher Education & Professional Group در سال 2016. این کتاب در فرمت pdf، زبان انگلیسی ارائه شده است. «The Practice of Computing Using Python, Global Edition» در دستهٔ بدون دستهبندی قرار دارد.
For courses in Python Programming" Introduces Python programming with an emphasis on problem-solving Now in its Third Edition, "Practice of Computing Using Python" continues to effectively introduce readers to computational thinking using Python, with a strong emphasis on problem solving through computer science. The authors have chosen Python for its simplicity, powerful built-in data structures, advanced control constructs, and practicality. The text is built from the ground up for Python programming, rather than having been translated from Java or C++. Focusing on data manipulation and analysis as a theme, the text allows readers to work on real problems using Internet-sourced or self-generated data sets that represent their own work and interests. The authors also emphasize program development and provide readers of all backgrounds with a practical foundation in programming that suit their needs. Among other changes, the Third Edition incorporates a switch to the Anaconda distribution, the SPYDER IDE, and a focus on debugging and GUIs. Also availablewith MyProgrammingLab MyProgrammingLab is an online learning system designed to engage students and improve results. MyProgrammingLab consists of a set of programming exercises correlated to specific Pearson CS1/Intro to Programming textbooks. Through practice exercises and immediate, personalized feedback, MyProgrammingLab improves the programming competence of beginning students who often struggle with the basic concepts of programming languages. Note: You are purchasing a standalone product; MyLab & Mastering does not come packaged with this content. Students, if interested in purchasing this title with MyLab & Mastering, ask your instructor for the correct package ISBN and Course ID. Instructors, contact your Pearson representative for more information. If you would like to purchase boththe physical text and MyLab & Mastering, search for: 0134520513 / 9780134520513" " "The" " Practice of Computing Using Python plus MyProgrammingLab with Pearson eText -- Access Card Package, 3/e " Package consists of: 0134381327 / 9780134381329 " MyProgrammingLab with Pearson eText -- Access Card Package " 0134379764 / 9780134379760 " The Practice of Computing Using Python, 3/e " Cover......Page 1 Inside Front Cover......Page 2 Title Page......Page 4 Copyright Page......Page 5 Dedication......Page 6 Brief Contents......Page 8 Contents......Page 10 Videonotes......Page 27 Preface......Page 28 Acknowledgments For the Global Edition......Page 31 PREFACE TO THE SECOND EDITION......Page 32 1.0.3 Code Examples......Page 33 1.0.7 Programming Tips......Page 34 PART 1 THINKING ABOUT COMPUTING......Page 36 0.1.1 Importance of Computer Science......Page 38 0.1.3 Computer “Science”......Page 39 0.2.1 Difficulty 1: Two Things at Once......Page 41 0.2.2 Difficulty 2: What Is a Good Program?......Page 44 0.2.3 The Promise of a Computer Program......Page 45 0.3.2 Why Python?......Page 46 0.5 What Is a Computer?......Page 48 0.5.1 Computation in Nature......Page 49 0.5.2 The Human Computer......Page 52 0.6.1 It’s the Switch!......Page 53 0.6.2 The Transistor......Page 54 0.7 A High-Level Look at a Modern Computer......Page 59 0.8.1 Binary Data......Page 61 0.8.2 Working with Binary......Page 62 0.8.3 Limits......Page 63 0.8.4 Representing Letters......Page 64 0.8.5 Representing Other Data......Page 65 0.8.6 What Does a Number Represent?......Page 66 0.8.8 HowMuch Data Is That?......Page 67 0.9 Overview of Coming Chapters......Page 69 PART 2 STARTING TO PROGRAM......Page 70 1.1 Practice, Practice, Practice......Page 72 1.2 QuickStart, the Circumference Program......Page 73 1.2.1 Examining the Code......Page 75 1.3 An Interactive Session......Page 77 1.4.2 Statements and Expressions......Page 78 1.4.3 Whitespace......Page 80 1.4.5 Special Python Elements: Tokens......Page 81 1.4.6 Naming Objects......Page 83 1.5 Variables......Page 84 1.5.1 Variable Creation and Assignment......Page 85 1.6 Objects and Types......Page 88 1.6.1 Numbers......Page 90 1.6.2 Other Built-In Types......Page 92 1.6.3 Object Types: Not Variable Types......Page 93 1.6.4 Constructing New Values......Page 95 1.7.1 Integer Operators......Page 96 1.7.3 Mixed Operations......Page 99 1.7.4 Order of Operations and Parentheses......Page 100 1.7.5 Augmented Assignment Operators: A Shortcut!......Page 101 1.8 Your First Module, Math......Page 103 1.9 Developing an Algorithm......Page 104 1.9.1 New Rule—Testing......Page 108 1.10 Visual Vignette: Turtle Graphics......Page 109 1.11 What’s Wrong with My Code?......Page 110 2.1.1 Selection......Page 122 2.1.3 The if Statement......Page 124 2.1.4 Example: What Lead Is Safe in Basketball?......Page 127 2.1.5 Repetition......Page 131 2.1.6 Example: Finding Perfect Numbers......Page 135 2.1.7 Example: Classifying Numbers......Page 140 2.2.1 True and False: Booleans......Page 144 2.2.3 Relational Operators......Page 145 2.2.4 Boolean Operators......Page 150 2.2.5 Precedence......Page 151 2.2.6 Boolean Operators Example......Page 152 2.2.7 Another Word on Assignments......Page 155 2.2.9 More on Python Decision Statements......Page 157 2.2.10 Repetition: the while Statement......Page 161 2.2.12 Summary of Repetition......Page 171 2.2.13 More on the for Statement......Page 172 2.2.14 Nesting......Page 175 2.2.15 Hailstone Sequence Example......Page 177 2.3 Visual Vignette: Plotting Data with Pylab......Page 178 2.3.1 First Plot and Using a List......Page 179 2.3.2 More Interesting Plot: A Sine Wave......Page 180 2.4.1 Minimal Universal Computing......Page 182 2.5 What’s Wrong with My Code?......Page 183 3.1 What Is an Algorithm?......Page 196 3.1.1 Example Algorithms......Page 197 3.2.1 Algorithm versus Program......Page 198 3.2.2 Qualities of an Algorithm......Page 200 3.3.1 Readability......Page 202 3.3.2 Robust......Page 206 3.3.3 Correctness......Page 207 3.4.1 Engage and Commit......Page 208 3.4.2 Understand, Then Visualize......Page 209 3.4.5 Simplify......Page 210 3.5 A Simple Example......Page 212 3.5.2 Output......Page 213 3.5.3 Input......Page 214 3.5.4 Doing the Calculation......Page 216 PART 3 DATA STRUCTURES AND FUNCTIONS......Page 222 Chapter 4 Working with Strings......Page 224 4.1.1 The Triple-Quote String......Page 225 4.1.3 String Representation......Page 226 4.1.4 Strings as a Sequence......Page 227 4.1.5 More Indexing and Slicing......Page 228 4.1.6 Strings Are Iterable......Page 233 4.2.1 Concatenation (+) and Repetition (*)......Page 234 4.2.2 Determining When + Indicates Addition or Concatenation?......Page 235 4.2.3 Comparison Operators......Page 236 4.2.4 The in Operator......Page 237 4.2.5 String Collections Are Immutable......Page 238 4.3.1 A String Method......Page 240 4.3.2 Determining Method Names and Method Arguments......Page 243 4.3.4 String Functions......Page 245 4.4 Formatted Output for Strings......Page 246 4.4.1 Descriptor Codes......Page 247 4.4.2 Width and Alignment Descriptors......Page 248 4.4.3 Floating-Point Precision Descriptor......Page 249 4.5 Control and Strings......Page 250 4.6.1 Example: Reordering a Person’s Name......Page 253 4.6.2 Palindromes......Page 255 4.7 More String Formatting......Page 258 4.8 Unicode......Page 261 4.9 A GUI to Check a Palindrome......Page 263 4.10 What’s Wrong with My Code?......Page 267 5.1 What Is a Function?......Page 280 5.1.1 Why Have Functions?......Page 281 5.2 Python Functions......Page 282 5.3 Flow of Control with Functions......Page 285 5.3.2 Parameter Passing......Page 286 5.3.3 Another Function Example......Page 288 5.3.4 Function Example: Area of a Triangle......Page 289 5.3.5 Functions Calling Functions......Page 293 5.3.6 When to Use a Function......Page 294 5.3.8 What If There Are Multiple Return Statements?......Page 295 5.4 Visual Vignette: Turtle Flag......Page 296 5.5 What’s Wrong with My Code?......Page 297 6.2 Accessing Files: Reading Text Files......Page 306 6.2.1 What’s Really Happening?......Page 307 6.3 Accessing Files: Writing Text Files......Page 308 6.4 Reading and Writing Text Files in a Program......Page 309 6.5 File Creation and Overwriting......Page 310 6.5.1 Files and Functions Example: Word Puzzle......Page 311 6.6 First Cut, Handling Errors......Page 317 6.6.2 The try-except Construct......Page 318 6.6.3 try-except Flow of Control......Page 319 6.6.4 Exception Example......Page 320 6.7 Example: Counting Poker Hands......Page 323 6.7.1 Program to Count Poker Hands......Page 326 6.8 GUI to Count Poker Hands......Page 334 6.8.1 Count Hands Function......Page 335 6.8.2 The Rest of the GUI Code......Page 337 6.10 What’s Wrong with My Code?......Page 339 7.1 What Is a List?......Page 346 7.2 What You Already Know How To Do With Lists......Page 348 7.2.1 Indexing and Slicing......Page 349 7.2.2 Operators......Page 350 7.2.3 Functions......Page 352 7.2.4 List Iteration......Page 353 7.3.1 Lists Are Mutable......Page 354 7.3.2 List Methods......Page 355 7.4.1 Split and Multiple Assignment......Page 360 7.4.2 List to String and Back Again, Using join......Page 361 7.4.3 The Sorted Function......Page 362 7.5.1 Anagrams......Page 363 7.5.2 Example: File Analysis......Page 369 7.6 Mutable Objects and References......Page 375 7.6.1 Shallow versus Deep Copy......Page 380 7.6.2 Mutable versus Immutable......Page 384 7.7 Tuples......Page 385 7.7.1 Tuples from Lists......Page 387 7.8 Lists: The Data Structure......Page 388 7.8.1 Example Data Structure......Page 389 7.9 Algorithm Example: U.S. EPA Automobile Mileage Data......Page 390 7.9.1 CSV Module......Page 400 7.10 Visual Vignette: Plotting EPA Data......Page 401 7.11 List Comprehension......Page 403 7.12 Visual Vignette: More Plotting......Page 405 7.12.1 Pylab Arrays......Page 406 7.12.2 Plotting Trigonometric Functions......Page 408 7.13.1 Function Model......Page 409 7.13.2 Controller......Page 410 7.14 What’s Wrong with My Code?......Page 412 8.1 Scope......Page 430 8.1.1 Arguments, Parameters, and Namespaces......Page 432 8.1.2 Passing Mutable Objects......Page 434 8.1.3 Returning a Complex Object......Page 436 8.1.4 Refactoring evens......Page 438 8.2 Default Values and Parameters as Keywords......Page 439 8.2.1 Example: Default Values and Parameter Keywords......Page 440 8.3 Functions as Objects......Page 442 8.3.1 Function Annotations......Page 443 8.3.2 Docstrings......Page 444 8.4.2 The Design......Page 445 8.4.4 Function: parse_line......Page 446 8.4.5 Function: main......Page 447 8.5 Pass “by Value” or “by Reference”......Page 448 8.6 What’s Wrong with My Code?......Page 449 9.1 Dictionaries......Page 458 9.1.1 Dictionary Example......Page 459 9.1.3 Dictionary Indexing and Assignment......Page 460 9.1.4 Operators......Page 461 9.1.5 Ordered Dictionaries......Page 466 9.2.1 Count Words in a String......Page 467 9.2.2 Word Frequency for Gettysburg Address......Page 468 9.2.3 Output and Comments......Page 472 9.3 Periodic Table Example......Page 473 9.3.1 Working with CSV Files......Page 474 9.3.3 Functions for Divide and Conquer......Page 476 9.4.2 What’s in a Set?......Page 480 9.4.3 Python Sets......Page 481 9.4.5 Set Methods......Page 482 9.5.1 Relationship between Words of Different......Page 487 9.6 Scope: The Full Story......Page 491 9.6.3 Local......Page 492 9.6.4 Global......Page 493 9.6.5 Built-Ins......Page 497 9.6.6 Enclosed......Page 498 9.7 Using zip to Create Dictionaries......Page 499 9.8 Dictionary and Set Comprehensions......Page 500 9.9.1 Getting the Data Right......Page 501 9.9.3 Plotting......Page 502 9.10 GUI to Compare Files......Page 503 9.10.1 Controller and View......Page 504 9.10.2 Function Model......Page 506 9.11 What’s Wrong with My Code?......Page 508 10.2 Divide and Conquer......Page 518 10.3.1 The Problem......Page 519 10.3.4 Building the Classifier......Page 520 10.4 Designing the Classifier Algorithm......Page 522 10.4.1 Divided, now Conquer......Page 525 10.4.3 File Format......Page 526 10.4.4 The make_training_set Function......Page 527 10.4.5 The make_test_set Function......Page 531 10.4.6 The train_classifier Function......Page 532 10.4.7 train_classifier, Round 2......Page 534 10.4.8 Testing the Classifier on New Data......Page 537 10.4.9 The report_results Function......Page 541 10.5.1 Training versus Testing......Page 543 10.6.1 Tag Clouds......Page 547 10.6.2 S&P 500 Predictions......Page 549 10.6.3 Predicting Religion with Flags......Page 552 10.7.1 Function Model......Page 554 10.7.2 Controller and View......Page 556 PART 4 CLASSES, MAKING YOUR OWN DATA STRUCTURES AND ALGORITHMS......Page 562 11.1 QuickStart: Simple Student Class......Page 564 11.2.1 Python Is Object-Oriented!......Page 565 11.3.1 Class and Instance......Page 566 11.4.1 Built-In Class and Instance......Page 567 11.4.2 Our First Class......Page 569 11.4.3 Changing Attributes......Page 571 11.4.4 The Special Relationship Between an Instance and Class: instance-of......Page 572 11.5.1 Using Object Methods......Page 575 11.5.2 Writing Methods......Page 576 11.5.3 The Special Argument self......Page 577 11.5.4 Methods Are the Interface to a Class Instance......Page 579 11.6.2 A Student Class......Page 580 11.6.3 Python Standard Methods......Page 581 11.6.4 Now There Are Three: Class Designer, Programmer, and User......Page 585 11.7 Example: Point Class......Page 586 11.7.3 Summing Two Points......Page 588 11.7.4 Improving the Point Class......Page 589 11.8.1 Encapsulation......Page 593 11.9.1 Public versus Private......Page 594 11.9.2 Indicating Privacy Using Double Underscores (__)......Page 595 11.9.3 Python’s Philosophy......Page 596 11.10 What’s Wrong with My Code?......Page 597 12.1 More About Class Properties......Page 606 12.1.1 Rational Number (Fraction) Class Example......Page 607 12.2.1 Classes, Types, and Introspection......Page 609 12.3 Creating Your Own Operator Overloading......Page 612 12.3.1 Mapping Operators to Special Methods......Page 613 12.4.1 Making the Class......Page 616 12.4.2 Review Fraction Addition......Page 618 12.4.3 Back to Adding Fractions......Page 621 12.4.4 Equality and Reducing Rationals......Page 625 12.5 What Doesn’t Work (Yet)......Page 628 12.5.1 Introspection......Page 629 12.5.2 Repairing int + Rational Errors......Page 631 12.6 Inheritance......Page 633 12.6.1 The “Find the Attribute” Game......Page 634 12.6.2 Using Inheritance......Page 637 12.6.3 Example: The Standard Model......Page 638 12.7 What’s Wrong with My Code?......Page 643 13.1 Predator–Prey Problem......Page 650 13.1.1 The Rules......Page 651 13.2.1 Island Class......Page 652 13.2.2 Predator and Prey, Kinds of Animals......Page 654 13.2.3 Predator and Prey Classes......Page 657 13.2.5 Filling the Island......Page 658 13.3.1 Refinement: Add Movement......Page 661 13.3.2 Refinement: Time Simulation Loop......Page 664 13.4 Refinement: Eating, Breeding, and Keeping Time......Page 665 13.4.1 Improved Time Loop......Page 666 13.4.2 Breeding......Page 669 13.4.3 Eating......Page 671 13.4.4 The Tick of the Clock......Page 672 13.5 Refinement: How Many Times to Move?......Page 673 13.6 Visual Vignette: Graphing Population Size......Page 674 PART 5 BEING A BETTER PROGRAMMER......Page 678 14.1 More Details on Files......Page 680 14.1.1 Other File Access Methods, Reading......Page 682 14.1.2 Other File Access Methods, Writing......Page 684 14.1.3 Universal New Line Format......Page 686 14.1.4 Moving Around in a File......Page 687 14.1.6 The with Statement......Page 689 14.1.7 Text File Encodings......Page 690 14.2 CSV Files......Page 691 14.2.1 CSV Module......Page 692 14.2.2 CSV Reader......Page 693 14.2.4 Example: Update Some Grades......Page 694 14.3 Module: os......Page 696 14.3.1 Directory (Folder) Structure......Page 697 14.3.2 os Module Functions......Page 698 14.3.3 os Module Example......Page 700 14.4 More on Exceptions......Page 702 14.4.1 Basic Exception Handling......Page 703 14.4.2 A Simple Example......Page 704 14.4.3 Events......Page 706 14.4.4 A Philosophy Concerning Exceptions......Page 707 14.5.2 Example: Refactoring the Reprompting of a File Name......Page 708 14.6.1 Raise......Page 710 14.6.2 Create Your Own......Page 711 14.7 Example: Password Manager......Page 712 15.1 What Is Recursion?......Page 722 15.2 Mathematics and Rabbits......Page 724 15.3 Let’s Write Our Own: Reversing a String......Page 727 15.4 How Does Recursion Actually Work?......Page 729 15.4.1 Stack Data Structure......Page 730 15.4.2 Stacks and Function Calls......Page 732 15.4.3 A Better Fibonacci......Page 734 15.5.1 Recursive Tree......Page 735 15.5.2 Sierpinski Triangles......Page 737 15.6 Recursion to Non-recursion......Page 738 15.7.1 Using Turtle Graphics to Draw......Page 739 15.7.2 Function Model......Page 740 15.7.3 Controller and View......Page 741 16.1 Numbers......Page 744 16.1.1 Fractions......Page 745 16.1.2 Decimal......Page 749 16.1.3 Complex Numbers......Page 753 16.1.4 Statistics Module......Page 755 16.1.5 Random Numbers......Page 757 16.2 Even More on Functions......Page 759 16.2.1 Having a Varying Number of Parameters......Page 760 16.2.2 Iterators and Generators......Page 763 16.2.3 Other Functional Programming Ideas......Page 768 16.2.4 Some Functional Programming Tools......Page 769 16.2.5 Decorators: Functions Calling Functions......Page 771 16.3 Classes......Page 776 16.3.1 Properties......Page 777 16.3.2 Serializing an Instance: pickle......Page 780 16.4.2 Built-in Modules......Page 783 16.4.3 Modules on the Internet......Page 784 Chapter 17 The End, or Perhaps the Beginning......Page 786 A.1.2 Python 3......Page 788 A.1.3 Python Is Free and Portable......Page 789 A.1.5 Starting Our Python IDE: Spyder......Page 791 A.1.6 Working with Python......Page 792 A.1.7 Making a Program......Page 795 A.2 The IPython Console......Page 797 A.2.1 Anatomy of an iPython Session......Page 798 A.2.3 Completion and the Tab Key......Page 799 A.2.5 More iPython Tips......Page 801 A.3 Some Conventions for This Book......Page 804 A.3.3 Combined Program and Output......Page 805 A.4 Summary......Page 806 B.0.1 What Is a Turtle?......Page 808 B.0.3 Drawing......Page 810 B.0.4 Color......Page 812 B.0.5 Drawing with Color......Page 814 B.0.6 Other Commands......Page 816 B.1.1 Reset/Close the Turtle Window......Page 818 C.1.1 Kinds of Errors......Page 820 C.1.2 “Bugs” and Debugging......Page 822 C.2.3 Debugging with Spyder Example 1......Page 824 C.2.4 Debugging Example 1 Using print()......Page 828 C.2.5 Debugging with Spyder Example 2......Page 829 C.2.6 More Debugging Tips......Page 837 C.3 More about Testing......Page 838 C.3.1 Testing Is Hard!......Page 839 C.4.1 Chapter 1: Beginnings......Page 840 C.4.2 Chapter 2: Control......Page 842 C.4.3 Chapter 4: Strings......Page 843 C.4.4 Chapter 5: Functions......Page 844 C.4.5 Chapter 6: Files and Exceptions......Page 845 C.4.6 Chapter 7: Lists and Tuples......Page 846 C.4.7 Chapter 8: More Functions......Page 847 C.4.8 Chapter 9: Dictionaries......Page 848 C.4.9 Chapter 11: Classes I......Page 849 C.4.10 Chapter 12: Classes II......Page 850 D.1 Plotting......Page 852 D.2.1 Plot Command......Page 853 D.2.3 Generating X-Values......Page 854 D.2.4 Plot Properties......Page 855 D.2.5 Tick Labels......Page 856 D.2.6 Legend......Page 857 D.2.8 Histograms......Page 859 D.2.9 Pie Charts......Page 860 D.2.10How Powerful Is pylab?......Page 861 Appendix E Quick Introduction to Web-based User Interfaces......Page 864 E.1 Flask......Page 865 E.2 QuickStart Flask, Hello World......Page 866 E.2.1 What Just Happened?......Page 867 E.2.2 Multiple Routes......Page 868 E.2.3 Stacked Routes, Passing Address Arguments......Page 870 E.3.2 HTML Tags......Page 871 E.3.3 Flask Returning Web Pages......Page 873 E.3.4 Getting Arguments into Our Web Pages......Page 874 E.4.1 Forms in wtforms......Page 876 E.4.2 A Good Example Goes a Long Way......Page 877 E.4.3 Many Fields Example......Page 882 E.5 Displaying and Updating Images......Page 887 E.6 Odds and Ends......Page 892 Appendix F Table of UTF-8 One Byte Encodings......Page 894 Appendix G Precedence......Page 896 Appendix H Naming Conventions......Page 898 H.2.1 Our Added Naming Conventions......Page 899 H.3 Other Python Conventions......Page 900 Types and Operators......Page 902 for and range Check......Page 903 Exception Check......Page 904 Passing Mutables Check......Page 905 Defining Special Methods......Page 906 Basic Exception Control......Page 907 C......Page 908 E......Page 909 H......Page 910 M......Page 911 P......Page 912 R......Page 913 S......Page 914 Z......Page 915 For courses in Python Programming Now in its 3rd Edition, Practice of Computing Using Python continues to introduce both majors and non-majors taking CS1 courses to computational thinking using Python, with a strong emphasis on problem solving through computer science. The authors have chosen Python for its simplicity, powerful built-in data structures, advanced control constructs, and practicality. The text is built from the ground up for Python programming, rather than having been translated from Java or C++. Focusing on data manipulation and analysis as a theme, the text allows students to work on real problems using Internet-sourced or self-generated data sets that represent their own work and interests. The authors also emphasise program development and provide both majors and non-majors with a practical foundation in programming that will be useful in their respective fields. Among other changes, the 3rd Edition incorporates a switch to the Anaconda distribution, the SPYDER IDE, and a focus on debugging and GUIs. The full text downloaded to your computer With eBooks you can: search for key concepts, words and phrases make highlights and notes as you study share your notes with friends eBooks are downloaded to your computer and accessible either offline through the Bookshelf (available as a free download), available online and also via the iPad and Android apps. Upon purchase, you'll gain instant access to this eBook. Time limit The eBooks products do not have an expiry date. You will continue to access your digital ebook products whilst you have your Bookshelf installed. A FIRST COURSE IN COMPUTER SCIENCE IS ABOUT A NEW WAY OF SOLVING PROBLEMS computationally. Our goal is that after the course, students when presented with a problem will think, "Hey, I can write a program to do that!" The teaching of problem solving is inexorably intertwined with the computer language used. Thus, the choice of language for this first course is very important. We have chosen Python as the introductory language for beginning programming students-majors and non-majors alike-based on our combined 55 years of experience teaching undergraduate introductory computer science at Michigan State University. Having taught the course in Pascal, C/C++, and now Python, we know that an introductory programming language should have two characteristics. First, it should be relatively simple to learn. Python's simplicity, powerful built-in data structures, and advanced control constructs allow students to focus more on problem solving and less on language issues. Second, it should be practical. Python supports learning not only fundamental programming issues such as typical programming constructs, a fundamental object-oriented approach, common data structures, and so on, but also more complex computing issues such as threads and regular expressions. Finally, Python is "industrial strength" forming the backbone of companies such as YouTube, DropBox, Industrial Light and Magic, and many others
دانلود کتاب The Practice of Computing Using Python, Global Edition