ebook img

Fundamentals of Python Programming PDF

9.5 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Fundamentals of Python Programming

Fundamentals of Python Programming T F A R D Richard L. Halterman Southern Adventist University July 26, 2018 FundamentalsofPythonProgramming Copyright©2017RichardL.Halterman. Allrightsreserved. See the preface for the terms of use of this document. i Contents 1 TheContextofSoftwareDevelopment 1 1.1 Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 DevelopmentTools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 LearningProgrammingwithPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 WritingaPythonProgram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.5 ThePythonInteractiveShell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 1.6 ALongerPythonprogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 1.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 ValuesandVariables 13 2.1 IntegerandStringValues. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.2 VariablesandAssignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.3 Identifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.4 Floating-pointNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 2.5 ControlCodeswithinStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2.6 UserInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.7 ControllingtheprintFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 2.8 StringFormatting. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 2.9 Multi-lineStrings. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 2.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 3 ExpressionsandArithmetic 43 3.1 Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 3.2 MixedTypeExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3 OperatorPrecedenceandAssociativity . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.4 FormattingExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS ii 3.5 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 3.6 Errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.6.1 SyntaxErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 3.6.2 Run-timeExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.6.3 LogicErrors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 3.7 ArithmeticExamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 3.8 MoreArithmeticOperators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 3.9 Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 3.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 4 ConditionalExecution 67 4.1 BooleanExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2 BooleanExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.3 TheSimpleifStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 4.4 Theif/elseStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 4.5 CompoundBooleanExpressions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 4.6 ThepassStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 4.7 Floating-pointEquality. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 4.8 NestedConditionals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 4.9 Multi-wayDecisionStatements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 4.10 Multi-wayVersusSequentialConditionals . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.11 ConditionalExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.12 ErrorsinConditionalStatements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 4.13 LogicComplexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 4.14 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 5 Iteration 113 5.1 ThewhileStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 5.2 DefiniteLoopsvs. IndefiniteLoops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 5.3 TheforStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 5.4 NestedLoops . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 5.5 AbnormalLoopTermination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 5.5.1 Thebreakstatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 5.5.2 ThecontinueStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 5.6 while/elseandfor/else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS iii 5.7 InfiniteLoops. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 5.8 IterationExamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5.8.1 ComputingSquareRoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 5.8.2 DrawingaTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 5.8.3 PrintingPrimeNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 5.8.4 InsistingontheProperInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 5.9 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 6 UsingFunctions 157 6.1 IntroductiontoUsingFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 6.2 FunctionsandModules. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 6.3 TheBuilt-inFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 6.4 StandardMathematicalFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 6.5 timeFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170 6.6 RandomNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 6.7 System-specificFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 6.8 TheevalandexecFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 6.9 TurtleGraphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 6.10 OtherTechniquesforImportingFunctionsandModules . . . . . . . . . . . . . . . . . . 185 6.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 7 WritingFunctions 193 7.1 FunctionBasics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 7.2 ParameterPassing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 7.3 DocumentingFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 7.4 FunctionExamples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 7.4.1 BetterOrganizedPrimeGenerator . . . . . . . . . . . . . . . . . . . . . . . . . 213 7.4.2 CommandInterpreter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 7.4.3 RestrictedInput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 7.4.4 BetterDieRollingSimulator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 7.4.5 TreeDrawingFunction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 7.4.6 Floating-pointEquality . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 7.5 RefactoringtoEliminateCodeDuplication . . . . . . . . . . . . . . . . . . . . . . . . . 222 7.6 CustomFunctionsvs. StandardFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . 224 7.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS iv 8 MoreonFunctions 233 8.1 GlobalVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 8.2 DefaultParameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 8.3 IntroductiontoRecursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 8.4 MakingFunctionsReusable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 8.5 FunctionsasData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 8.6 SeparatingConcernswithPluggableModules . . . . . . . . . . . . . . . . . . . . . . . . 253 8.7 LambdaExpressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 8.8 Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 8.9 LocalFunctionDefinitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 8.10 Decorators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 8.11 PartialApplication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 8.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 9 Objects 311 9.1 UsingObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 9.2 StringObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 9.3 FileObjects. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 9.4 FractionObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 9.5 TurtleGraphicsObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 9.6 GraphicswithtkinterObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 9.7 OtherStandardPythonObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 9.8 ObjectMutabilityandAliasing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 9.9 GarbageCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 9.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 10 Lists 339 10.1 UsingLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 10.2 ListTraversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 10.3 BuildingLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 10.4 ListMembership . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 10.5 ListAssignmentandEquivalence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 10.6 ListBounds. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 10.7 Slicing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 10.8 ListElementRemoval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS v 10.9 ListsandFunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 10.10 ListMethods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 10.11 PrimeGenerationwithaList. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366 10.12 Command-lineArguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 10.13 ListComprehensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 10.14 MultidimensionalLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 10.15 SummaryofListCreationTechniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 10.16 Listsvs. Generators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 10.17 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 11 Tuples,Dictionaries,andSets 389 11.1 Tuples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 11.2 ArbitraryArgumentLists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 11.3 Dictionaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 11.4 UsingDictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 11.5 CountingwithDictionaries. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 11.6 GroupingwithDictionaries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 11.7 KeywordArguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 11.8 Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 11.9 SetQuantificationwithallandany . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 11.10 EnumeratingtheElementsofaDataStructure . . . . . . . . . . . . . . . . . . . . . . . 419 11.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 12 HandlingExceptions 425 12.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 12.2 CommonStandardExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 12.3 HandlingExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 12.4 HandlingMultipleExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 12.5 TheCatch-allHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 12.6 CatchingExceptionObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436 12.7 ExceptionHandlingScope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 12.8 RaisingExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 12.9 ThetryStatement’sOptionalelseBlock. . . . . . . . . . . . . . . . . . . . . . . . . . 451 12.10 finallyblock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 12.11 UsingExceptionsWisely. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS vi 12.12 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 13 CustomTypes 463 13.1 CircleObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 13.2 RestrictingAccesstoMembers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 13.3 RationalNumbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 13.4 BankAccountObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 13.5 StopwatchObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 13.6 TrafficLightObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 13.7 AutomatedTesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 13.8 PlottingData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 13.9 DynamicContent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 13.10 ClassVariables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 13.11 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 14 ClassDesign: CompositionandInheritance 513 14.1 Composition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 14.2 ClassInheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 14.3 Compositionvs. Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 14.4 MultipleInheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 14.5 UnitTesting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 14.6 CustomExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 14.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 15 AlgorithmQuality 567 15.1 GoodAlgorithmsVersusBadAlgorithms . . . . . . . . . . . . . . . . . . . . . . . . . . 567 15.2 Sorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 15.3 FlexibleSorting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 15.4 Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 15.4.1 LinearSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582 15.4.2 BinarySearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 15.5 RecursionRevisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 15.6 ListPermutations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 600 15.7 RandomlyPermutingaList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609 15.8 ReversingaList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS vii 15.9 Memoization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 15.10 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 16 RepresentingRelationshipswithGraphs 631 16.1 IntroductiontoGraphs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 16.2 ImplementingGraphsinPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 16.3 PathFinding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 16.4 Breadth-firstSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637 16.5 Depth-firstSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 16.6 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654 Index 655 ©2017RichardL.Halterman Draftdate:July26,2018 CONTENTS viii ©2017RichardL.Halterman Draftdate:July26,2018

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.