Description
Efnisyfirlit
- Title Page
- Getting the Most from Your eText
- New to this Edition
- Tips for Using the Interactive Exercises
- A Tour of the Book
- Walkthrough of the Learning Aids
- Acknowledgments
- Quick Reference
- 1. Introduction
- 1.1 Computer Programs
- Self Check
- 1.2 The Anatomy of a Computer
- Self Check
- Computing & Society 1.1 Computers Are Everywhere
- 1.3 The Python Programming Language
- Self Check
- 1.4 Becoming Familiar with Your Programming Environment
- Self Check
- Programming Tip 1.1 Interactive Mode
- Programming Tip 1.2 Backup Copies
- Special Topic 1.1 The Python Interpreter
- 1.5 Analyzing Your First Program
- Syntax 1.1 print Statement
- Self Check
- 1.6 Errors
- Self Check
- Common Error 1.1 Misspelling Words
- 1.7 Problem Solving: Algorithm Design
- Self Check
- Computing & Society 1.2 Data Is Everywhere
- How To 1.1 Describing an Algorithm with Pseudocode
- Worked Example 1.1 Writing an Algorithm for Tiling a Floor
- Chapter Summary
- Interactive Review and Practice
- Practice 1.1
- Practice 1.2
- Practice 1.3
- Practice 1.4
- Practice 1.5
- Practice 1.6
- Practice 1.7
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 2. Programming with Numbers and Strings
- 2.1 Variables
- 2.1.1 Defining Variables
- Syntax 2.1 Assignment
- Self Check
- 2.1.2 Number Types
- Self Check
- 2.1.3 Variable Names
- Self Check
- 2.1.4 Constants
- Self Check
- 2.1.5 Comments
- Common Error 2.1 Using Undefined Variables
- Programming Tip 2.1 Choose Descriptive Variable Names
- Programming Tip 2.2 Do Not Use Magic Numbers
- 2.2 Arithmetic
- 2.2.1 Basic Arithmetic Operations
- Self Check
- 2.2.2 Powers
- Self Check
- 2.2.3 Floor Division and Remainder
- Self Check
- 2.2.4 Calling Functions
- Syntax 2.2 Calling Functions
- Self Check
- 2.2.5 Mathematical Functions
- Self Check
- Common Error 2.2 Roundoff Errors
- Common Error 2.3 Unbalanced Parentheses
- Programming Tip 2.3 Use Spaces in Expressions
- Special Topic 2.1 Other Ways to Import Modules
- Special Topic 2.2 Combining Assignment and Arithmetic
- Special Topic 2.3 Line Joining
- 2.3 Problem Solving: First Do It By Hand
- Self Check
- Worked Example 2.1 Computing Travel Time
- 2.4 Strings
- 2.4.1 The String Type
- Self Check
- 2.4.2 Concatenation and Repetition
- Self Check
- 2.4.3 Converting Between Numbers and Strings
- Self Check
- 2.4.4 Strings and Characters
- Self Check
- 2.4.5 String Methods
- Self Check
- Special Topic 2.4 Character Values
- Special Topic 2.5 Escape Sequences
- Computing & Society 2.1 International Alphabets and Unicode
- 2.5 Input and Output
- 2.5.1 User Input
- Self Check
- 2.5.2 Numerical Input
- Self Check
- 2.5.3 Formatted Output
- Syntax 2.3 String Format Operator
- Self Check
- Programming Tip 2.4 Don’t Wait to Convert
- How To 2.1 Writing Simple Programs
- Worked Example 2.2 Computing the Cost of Stamps
- Computing & Society 2.2 Bugs in Silicon
- 2.6 Graphics: Simple Drawings
- 2.6.1 Creating a Window
- Self Check
- 2.6.2 Lines and Polygons
- Self Check
- 2.6.3 Filled Shapes and Color
- Self Check
- 2.6.4 Ovals, Circles, and Text
- Self Check
- How To 2.2 Graphics: Drawing Graphical Shapes
- Toolbox 2.1 Symbolic Processing with SymPy
- Chapter Summary
- Interactive Review and Practice
- Practice 2.1
- Practice 2.2
- Practice 2.3
- Practice 2.4
- Practice 2.5
- Practice 2.6
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 3. Decisions
- 3.1 The if Statement
- Syntax 3.1 if Statement
- Self Check
- Common Error 3.1 Tabs
- Programming Tip 3.1 Avoid Duplication in Branches
- Special Topic 3.1 Conditional Expressions
- 3.2 Relational Operators
- Self Check
- Common Error 3.2 Exact Comparison of Floating-Point Numbers
- Special Topic 3.2 Lexicographic Ordering of Strings
- How To 3.1 Implementing an if Statement
- Worked Example 3.1 Extracting the Middle
- 3.3 Nested Branches
- Self Check
- Programming Tip 3.2 Hand-Tracing
- Computing & Society 3.1 Dysfunctional Computerized Systems
- 3.4 Multiple Alternatives
- Self Check
- Toolbox 3.1 Sending E-mail
- 3.5 Problem Solving: Flowcharts
- Self Check
- 3.6 Problem Solving: Test Cases
- Self Check
- Programming Tip 3.3 Make a Schedule and Make Time for Unexpected Problems
- 3.7 Boolean Variables and Operators
- Self Check
- Common Error 3.3 Confusing and and or Conditions
- Programming Tip 3.4 Readability
- Special Topic 3.3 Chaining Relational Operators
- Special Topic 3.4 Short-Circuit Evaluation of Boolean Operators
- Special Topic 3.5 De Morgan’s Law
- 3.8 Analyzing Strings
- Self Check
- 3.9 Application: Input Validation
- Self Check
- Special Topic 3.6 Terminating a Program
- Special Topic 3.7 Interactive Graphical Programs
- Computing & Society 3.2 Artificial Intelligence
- Worked Example 3.2 Graphics: Intersecting Circles
- Toolbox 3.2 Plotting Simple Graphs
- Chapter Summary
- Interactive Review and Practice
- Practice 3.1
- Practice 3.2
- Practice 3.3
- Practice 3.4
- Practice 3.5
- Practice 3.6
- Practice 3.7
- Practice 3.8
- Practice 3.9
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 4. Loops
- 4.1 The while Loop
- Syntax 4.1 while Statement
- Self Check
- Common Error 4.1 Don’t Think “Are We There Yet?”
- Common Error 4.2 Infinite Loops
- Common Error 4.3 Off-by-One Errors
- Special Topic 4.1 Special Form of the print Function
- Computing & Society 4.1 The First Bug
- 4.2 Problem Solving: Hand-Tracing
- Self Check
- 4.3 Application: Processing Sentinel Values
- Self Check
- Special Topic 4.2 Processing Sentinel Values with a Boolean Variable
- Special Topic 4.3 Redirection of Input and Output
- 4.4 Problem Solving: Storyboards
- Self Check
- 4.5 Common Loop Algorithms
- 4.5.1 Sum and Average Value
- Self Check
- 4.5.2 Counting Matches
- Self Check
- 4.5.3 Prompting Until a Match is Found
- Self Check
- 4.5.4 Maximum and Minimum
- Self Check
- 4.5.5 Comparing Adjacent Values
- Self Check
- 4.6 The for Loop
- Syntax 4.2 for Statement
- Syntax 4.3 for Statement with range Function
- Self Check
- Programming Tip 4.1 Count Iterations
- How To 4.1 Writing a Loop
- 4.7 Nested Loops
- Self Check
- Worked Example 4.1 Average Exam Grades
- Worked Example 4.2 A Grade Distribution Histogram
- 4.8 Processing Strings
- 4.8.1 Counting Matches
- Self Check
- 4.8.2 Finding All Matches
- Self Check
- 4.8.3 Finding the First or Last Match
- Self Check
- 4.8.4 Validating a String
- Self Check
- 4.8.5 Building a New String
- Self Check
- 4.9 Application: Random Numbers and Simulations
- 4.9.1 Generating Random Numbers
- 4.9.2 Simulating Die Tosses
- 4.9.3 The Monte Carlo Method
- Self Check
- Worked Example 4.3 Graphics: Bull’s Eye
- 4.10 Graphics: Digital Image Processing
- 4.10.1 Filtering Images
- 4.10.2 Reconfiguring Images
- Self Check
- 4.11 Problem Solving: Solve a Simpler Problem First
- Self Check
- Computing & Society 4.2 Digital Piracy
- Chapter Summary
- Interactive Review and Practice
- Practice 4.1
- Practice 4.2
- Practice 4.3
- Practice 4.4
- Practice 4.5
- Practice 4.6
- Practice 4.7
- Practice 4.8
- Practice 4.9
- Practice 4.10
- Practice 4.11
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 5. Functions
- 5.1 Functions as Black Boxes
- Self Check
- 5.2 Implementing and Testing Functions
- 5.2.1 Implementing a Function
- 5.2.2 Testing a Function
- Syntax 5.1 Function Definition
- 5.2.3 Programs that Contain Functions
- Syntax 5.2 Program with Functions
- Self Check
- Programming Tip 5.1 Function Comments
- Programming Tip 5.2 Naming Functions
- 5.3 Parameter Passing
- Self Check
- Programming Tip 5.3 Do Not Modify Parameter Variables
- Common Error 5.1 Trying to Modify Arguments
- 5.4 Return Values
- Self Check
- Special Topic 5.1 Using Single-Line Compound Statements
- How To 5.1 Implementing a Function
- Worked Example 5.1 Generating Random Passwords
- 5.5 Functions Without Return Values
- Self Check
- Computing & Society 5.1 Personal Computing
- 5.6 Problem Solving: Reusable Functions
- Self Check
- 5.7 Problem Solving: Stepwise Refinement
- Self Check
- Programming Tip 5.4 Keep Functions Short
- Programming Tip 5.5 Tracing Functions
- Programming Tip 5.6 Stubs
- Worked Example 5.2 Calculating a Course Grade
- Worked Example 5.3 Using a Debugger
- 5.8 Variable Scope
- Self Check
- Programming Tip 5.7 Avoid Global Variables
- Worked Example 5.4 Graphics: Rolling Dice
- 5.9 Graphics: Building an Image Processing Toolkit
- 5.9.1 Getting Started
- 5.9.2 Comparing Images
- 5.9.3 Adjusting Image Brightness
- 5.9.4 Rotating an Image
- 5.9.5 Using the Toolkit
- Self Check
- Worked Example 5.5 Plotting Growth or Decay
- 5.10 Recursive Functions (Optional)
- Self Check
- How To 5.2 Thinking Recursively
- Toolbox 5.1 Turtle Graphics
- Chapter Summary
- Interactive Review and Practice
- Practice 5.1
- Practice 5.2
- Practice 5.3
- Practice 5.4
- Practice 5.5
- Practice 5.6
- Practice 5.7
- Practice 5.8
- Practice 5.9
- Practice 5.10
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 6. Lists
- 6.1 Basic Properties of Lists
- 6.1.1 Creating Lists
- Self Check
- 6.1.2 Accessing List Elements
- Syntax 6.1 Lists
- Self Check
- 6.1.3 Traversing Lists
- Self Check
- 6.1.4 List References
- Self Check
- Common Error 6.1 Out-of-Range Errors
- Programming Tip 6.1 Use Lists for Sequences of Related Items
- Special Topic 6.1 Negative Subscripts
- Special Topic 6.2 Common Container Functions
- Computing & Society 6.1 Computer Viruses
- 6.2 List Operations
- 6.2.1 Appending Elements
- Self Check
- 6.2.2 Inserting an Element
- Self Check
- 6.2.3 Finding an Element
- Self Check
- 6.2.4 Removing an Element
- Self Check
- 6.2.5 Concatenation and Replication
- Self Check
- 6.2.6 Equality Testing
- Self Check
- 6.2.7 Sum, Maximum, Minimum, and Sorting
- Self Check
- 6.2.8 Copying Lists
- Self Check
- Special Topic 6.3 Slices
- 6.3 Common List Algorithms
- 6.3.1 Filling
- Self Check
- 6.3.2 Combining List Elements
- Self Check
- 6.3.3 Element Separators
- Self Check
- 6.3.4 Maximum and Minimum
- Self Check
- 6.3.5 Linear Search
- Self Check
- 6.3.6 Collecting and Counting Matches
- Self Check
- 6.3.7 Removing Matches
- Self Check
- 6.3.8 Swapping Elements
- Self Check
- 6.3.9 Reading Input
- Self Check
- Worked Example 6.1 Plotting Trigonometric Functions
- 6.4 Using Lists with Functions
- Self Check
- Special Topic 6.4 Call by Value and Call by Reference
- Special Topic 6.5 Tuples
- Special Topic 6.6 Functions with a Variable Number of Arguments
- Special Topic 6.7 Tuple Assignment
- Special Topic 6.8 Returning Multiple Values with Tuples
- Toolbox 6.1 Editing Sound Files
- 6.5 Problem Solving: Adapting Algorithms
- Self Check
- How To 6.1 Working with Lists
- Worked Example 6.2 Rolling the Dice
- 6.6 Problem Solving: Discovering Algorithms by Manipulating Physical Objects
- Self Check
- 6.7 Tables
- 6.7.1 Creating Tables
- 6.7.2 Accessing Elements
- 6.7.3 Locating Neighboring Elements
- 6.7.4 Computing Row and Column Totals
- 6.7.5 Using Tables with Functions
- Self Check
- Worked Example 6.3 A World Population Table
- Special Topic 6.9 Tables with Variable Row Lengths
- Worked Example 6.4 Graphics: Drawing Regular Polygons
- Chapter Summary
- Interactive Review and Practice
- Practice 6.1
- Practice 6.2
- Practice 6.3
- Practice 6.4
- Practice 6.5
- Practice 6.6
- Practice 6.7
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 7. Files and Exceptions
- 7.1 Reading and Writing Text Files
- 7.1.1 Opening a File
- Syntax 7.1 Opening and Closing Files
- 7.1.2 Reading from a File
- 7.1.3 Writing to a File
- 7.1.4 A File Processing Example
- Self Check
- Common Error 7.1 Backslashes in File Names
- 7.2 Text Input and Output
- 7.2.1 Iterating over the Lines of a File
- Self Check
- 7.2.2 Reading Words
- Self Check
- 7.2.3 Reading Characters
- Self Check
- 7.2.4 Reading Records
- Self Check
- Special Topic 7.1 Reading the Entire File
- Special Topic 7.2 Regular Expressions
- Special Topic 7.3 Character Encodings
- Toolbox 7.1 Working with CSV Files
- 7.3 Command Line Arguments
- Self Check
- How To 7.1 Processing Text Files
- Worked Example 7.1 Analyzing Baby Names
- Toolbox 7.2 Working with Files and Directories
- Computing & Society 7.1 Encryption Algorithms
- 7.4 Binary Files and Random Access (Optional)
- 7.4.1 Reading and Writing Binary Files
- 7.4.2 Random Access
- 7.4.3 Image Files
- 7.4.4 Processing BMP Files
- Self Check
- Worked Example 7.2 Graphics: Displaying a Scene File
- 7.5 Exception Handling
- 7.5.1 Raising Exceptions
- Syntax 7.2 Raising an Exception
- 7.5.2 Handling Exceptions
- Syntax 7.3 Handling Exceptions
- 7.5.3 The finally Clause
- Syntax 7.4 The finally Clause
- Self Check
- Programming Tip 7.1 Raise Early, Handle Late
- Programming Tip 7.2 Do Not Use except and finally in the Same try Statement
- Special Topic 7.4 The with Statement
- Toolbox 7.3 Reading Web Pages
- 7.6 Application: Handling Input Errors
- Self Check
- Toolbox 7.4 Statistical Analysis
- Worked Example 7.3 Creating a Bubble Chart
- Computing & Society 7.2 The Ariane Rocket Incident
- Chapter Summary
- Interactive Review and Practice
- Practice 7.1
- Practice 7.2
- Practice 7.3
- Practice 7.4
- Practice 7.5
- Practice 7.6
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 8. Sets and Dictionaries
- 8.1 Sets
- 8.1.1 Creating and Using Sets
- Self Check
- 8.1.2 Adding and Removing Elements
- Self Check
- 8.1.3 Subsets
- Self Check
- 8.1.4 Set Union, Intersection, and Difference
- Self Check
- Worked Example 8.1 Counting Unique Words
- Programming Tip 8.1 Use Python Sets, Not Lists, for Efficient Set Operations
- Special Topic 8.1 Hashing
- Computing & Society 8.1 Standardization
- 8.2 Dictionaries
- Syntax 8.1 Set and Dictionary Literals
- 8.2.1 Creating Dictionaries
- Self Check
- 8.2.2 Accessing Dictionary Values
- Self Check
- 8.2.3 Adding and Modifying Items
- Self Check
- 8.2.4 Removing Items
- Self Check
- 8.2.5 Traversing a Dictionary
- Self Check
- Special Topic 8.2 Iterating over Dictionary Items
- Special Topic 8.3 Storing Data Records
- Worked Example 8.2 Translating Text Messages
- 8.3 Complex Structures
- 8.3.1 A Dictionary of Sets
- 8.3.2 A Dictionary of Lists
- Self Check
- Special Topic 8.4 User Modules
- Worked Example 8.3 Graphics: Pie Charts
- Toolbox 8.1 Harvesting JSON Data from the Web
- Chapter Summary
- Interactive Review and Practice
- Practice 8.1
- Practice 8.2
- Practice 8.3
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 9. Objects and Classes
- 9.1 Object-Oriented Programming
- Self Check
- 9.2 Implementing a Simple Class
- Self Check
- 9.3 Specifying the Public Interface of a Class
- Self Check
- 9.4 Designing the Data Representation
- Self Check
- Programming Tip 9.1 Make All Instance Variables Private, Most Methods Public
- 9.5 Constructors
- Syntax 9.1 Constructor
- Self Check
- Common Error 9.1 Trying to Call a Constructor
- Special Topic 9.1 Default and Named Arguments
- 9.6 Implementing Methods
- Syntax 9.2 Method Definition
- Self Check
- Programming Tip 9.2 Define Instance Variables Only in the Constructor
- Special Topic 9.2 Class Variables
- 9.7 Testing a Class
- Self Check
- How To 9.1 Implementing a Class
- Worked Example 9.1 Implementing a Bank Account Class
- 9.8 Problem Solving: Tracing Objects
- Self Check
- 9.9 Problem Solving: Patterns for Object Data
- 9.9.1 Keeping a Total
- Self Check
- 9.9.2 Counting Events
- Self Check
- 9.9.3 Collecting Values
- Self Check
- 9.9.4 Managing Properties of an Object
- Self Check
- 9.9.5 Modeling Objects with Distinct States
- Self Check
- 9.9.6 Describing the Position of an Object
- Self Check
- 9.10 Object References
- 9.10.1 Shared References
- 9.10.2 The None Reference
- 9.10.3 The self Reference
- 9.10.4 The Lifetime of Objects
- Self Check
- Computing & Society 9.1 Electronic Voting
- 9.11 Application: Writing a Fraction Class
- 9.11.1 Fraction Class Design
- 9.11.2 The Constructor
- 9.11.3 Special Methods
- 9.11.4 Arithmetic Operations
- 9.11.5 Logical Operations
- Self Check
- Special Topic 9.3 Object Types and Instances
- Worked Example 9.2 Graphics: A Die Class
- Computing & Society 9.2 Open Source and Free Software
- Chapter Summary
- Interactive Review and Practice
- Practice 9.1
- Practice 9.2
- Practice 9.3
- Practice 9.4
- Practice 9.5
- Practice 9.6
- Practice 9.7
- Practice 9.8
- Practice 9.9
- Practice 9.10
- Practice 9.11
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 10. Inheritance
- 10.1 Inheritance Hierarchies
- Self Check
- Programming Tip 10.1 Use a Single Class for Variation in Values, Inheritance for Variation in Behavior
- Special Topic 10.1 The Cosmic Superclass: object
- 10.2 Implementing Subclasses
- Syntax 10.1 Subclass Definition
- Self Check
- Common Error 10.1 Confusing Super- and Subclasses
- 10.3 Calling the Superclass Constructor
- Syntax 10.2 Subclass Constructor
- Self Check
- 10.4 Overriding Methods
- Self Check
- Common Error 10.2 Forgetting to Use the super Function When Invoking a Superclass Method
- 10.5 Polymorphism
- Self Check
- Special Topic 10.2 Subclasses and Instances
- Special Topic 10.3 Dynamic Method Lookup
- Special Topic 10.4 Abstract Classes
- Common Error 10.3 Don’t Use Type Tests
- How To 10.1 Developing an Inheritance Hierarchy
- Worked Example 10.1 Implementing an Employee Hierarchy for Payroll Processing
- 10.6 Application: A Geometric Shape Class Hierarchy
- 10.6.1 The Base Class
- 10.6.2 Basic Shapes
- 10.6.3 Groups of Shapes
- Self Check
- Toolbox 10.1 Game Programming
- Chapter Summary
- Interactive Review and Practice
- Practice 10.1
- Practice 10.2
- Practice 10.3
- Practice 10.4
- Practice 10.5
- Practice 10.6
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 11. Recursion
- 11.1 Triangle Numbers Revisited
- Self Check
- Common Error 11.1 Infinite Recursion
- Special Topic 11.1 Recursion with Objects
- 11.2 Problem Solving: Thinking Recursively
- Self Check
- Worked Example 11.1 Finding Files
- 11.3 Recursive Helper Functions
- Self Check
- 11.4 The Efficiency of Recursion
- Self Check
- 11.5 Permutations
- Self Check
- Computing & Society 11.1 The Limits of Computation
- 11.6 Backtracking
- Self Check
- Worked Example 11.2 Towers of Hanoi
- 11.7 Mutual Recursion
- Self Check
- Toolbox 11.1 Analyzing Web Pages with Beautiful Soup
- Chapter Summary
- Interactive Review and Practice
- Practice 11.1
- Practice 11.2
- Practice 11.3
- Practice 11.4
- Practice 11.5
- Practice 11.6
- Practice 11.7
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- 12. Sorting and Searching
- 12.1 Selection Sort
- Self Check
- 12.2 Profiling the Selection Sort Algorithm
- Self Check
- 12.3 Analyzing the Performance of the Selection Sort Algorithm
- Self Check
- Special Topic 12.1 Oh, Omega, and Theta
- Special Topic 12.2 Insertion Sort
- 12.4 Merge Sort
- Self Check
- 12.5 Analyzing the Merge Sort Algorithm
- Self Check
- Special Topic 12.3 The Quicksort Algorithm
- Computing & Society 12.1 The First Programmer
- 12.6 Searching
- 12.6.1 Linear Search
- 12.6.2 Binary Search
- Self Check
- 12.7 Problem Solving: Estimating the Running Time of an Algorithm
- 12.7.1 Linear Time
- 12.7.2 Quadratic Time
- 12.7.3 The Triangle Pattern
- 12.7.4 Logarithmic Time
- Self Check
- Programming Tip 12.1 Searching and Sorting
- Special Topic 12.4 Comparing Objects
- Worked Example 12.1 Enhancing the Insertion Sort Algorithm
- Chapter Summary
- Interactive Review and Practice
- Practice 12.1
- Practice 12.2
- Practice 12.3
- Practice 12.4
- Practice 12.5
- Practice 12.6
- Practice 12.7
- End-of-Chapter Exercises
- Review Exercises
- Programming Exercises
- Appendices
- Appendix A Python Operator Summary
- Appendix B Python Reserved Word Summary
- Appendix C The Python Standard Library
- Built-in Functions
- Built-in Classes
- File Input/Output
- csv Module
- email.mime.multipart Module
- email.mime.text Module
- email.mime.image Module
- email.mime.application Module
- json Module
- math Module
- os Module
- os.path Module
- random Module
- re Module
- shutil Module
- smtplib Module
- sys Module
- time Module
- urllib.parse Module
- urllib.request Module
- ezgraphics Module
- turtle Module
- Appendix D The Basic Latin and Latin-1 Subsets of Unicode
- Appendix E Binary Numbers and Bit Operations
- Binary Numbers
- Two’s Complement Integers
- Bit and Shift Operations
- Appendix F HTML Summary
- Glossary
- Illustration Credits
- Wiley End User License Agreement
Reviews
There are no reviews yet.