- Learning Objectives of the Course
- Information About the Final Examination
- Summary of Topics for the Final Examination
- Best Practices for Real-World Python Programming
- Debugging and Testing of Python Programs
- Using Git Repositories and the GitHub Platform
- Chapters from the Book Called Doing Math with Python
- Chapters from the Book Called Programming and Mathematical Thinking
- Chapters 1 and 2 of Programming and Mathematical Thinking
- Chapter 3 of Programming and Mathematical Thinking
- Chapter 4 of Programming and Mathematical Thinking
- Chapter 5 of Programming and Mathematical Thinking
- Chapter 6 of Programming and Mathematical Thinking
- Chapter 7 of Programming and Mathematical Thinking
- Chapter 8 of Programming and Mathematical Thinking
- Chapter 9 of Programming and Mathematical Thinking
- Chapters 10 and 11 of Programming and Mathematical Thinking
Please review all of the learning objectives for this course as you prepare for the final examination. Before you take the final examination you should understand the meaning of each of these learning objectives have have confidence that you can demonstrate that you have the skill referenced in each objective.
- Review Sheet Released: Friday, December 4, 2020
- Examination Released: Thursday, December 10, 2020
- Examination Due: 11:59 pm on Friday, December 11, 2020
The exam will be closed notes and closed book and it will cover the following materials. Please review the course schedule to see the content and slides that we have covered to this date. Students may post questions about this material to our Slack team.
The exam will be a mix of questions that have a form such as short answer, completion, the interpretation and creation of Python source code, and the interpretation of Python program output. The final examination is comprehensive, meaning that it covers all of the content that we studied in this course in the class sessions and laboratory, practical, and technical challenge assignments. The emphasis will be on the following technical topics listed at the end of this review sheet.
- You must adhere to the Honor Code throughout your completion of the examination
- The examination is closed notes, closed book, and closed online resources
- You may use your laptop computer and its text editor and Python programming tools
- You may not refer to the Python source code that you wrote during the semester
- You may not refer to the technical writing that you completed during the semester
IMPORTANT: All students in this course are obligated to adhere to the Allegheny College Honor Code throughout the completion of this examination. If the instructor detects that a student has committed a likely violation of the Allegheny College Honor Code, then he will file a report with the Dean of Students Office. Please make sure that you review the Honor Code before you start to take this examination. Please note that, due to the ongoing global pandemic, Sections 1 and 2 of Honor Code Article IV are not enforced for this examination.
- You must provide answers to all these questions by typing in the GitHub repository
- The final version of this examination must be in your GitHub repository by the due date
- You may direct message the course instructor through the Slack workspace if you have questions
- Do not post questions about the examination in a public channel of the Slack workspace
- Unless you make special arrangements with the instructor, no late work will be accepted
- Using the Git and GitHub version control system
- Using Docker to support Python programming
- Using the VSCode text editor to manipulate Markdown and Python files
- Running GatorGrader in Docker to check a repository's correctness
- Using Poetry to manage program dependencies and run Python programs
- The benefits of using Python to explore discrete structures
- The ability to find and explain the following components of a Python program
- Function definition
- Function parameters
- Body of a function
- Return value of a function
- Invocation of a function
- How to write and run a test case for a Python function using Pytest
- How to use
print
andtyper.echo
statements to debug a Python program - How trace the execution of a Python function with debugging statements
- How to clone a GitHub repository using either a terminal window or a text editor
- How to write write commit messages that describe the specific way in which a commit changes the repository's content
- How to read and understand the reports produced by GitHub Actions so as to determine which aspects of a GitHub repository do not adhere to a project's specification
- How Python represents different types of numbers
- How Python supports computations with fractional and complex numbers
- How to implement a Python program to find the roots of a quadratic equation
- How to use Pytest to test a program that finds the roots of a quadratic equation
- How to create an empty list in the Python programming language
- How to use Python to iterate through the values in stored in a list
- How to use Python to create a visualization of a data set
- The definition of the statistical terms arithmetic mean and median
- How to use Python to calculate the mean and median of a list of numbers
- The meaning of the term dispersion when applied to a list of numbers
- How to use Python to calculate the variance and standard deviation of a list of numbers
- How to construct and manipulate sets using Python's Sympy package
- How to compute subsets, supersets, and power sets using Python's Sympy package
- How to perform set operations using sets created with Python's Sympy package
- Set union
- Set intersection
- Set difference
- The meaning of the following terms in the field of probability:
- Experiment
- Sample space
- Event
- How to calculate the probability of an event using a Python function
- How to calculate the probability of an event A or an event B
- How to calculate the probability of an event A and an event B
- The connections between Boolean logic operators and set-theoretic operations
- An understanding of the concept of a mathematical function
- How to install Python on your laptop
- How to implement a Python function that contains a main function
- How to rewrite Python source code so that it uses list comprehensions
- How to create and use the dictionary discrete structure in Python programs
- The way in which Python functions accept input and produce output
- An understanding of the Python source code needed to read data from a file
- How to handle the exceptional situations that may arise when reading data from a file
- The ways in which the creation and use of Python functions promotes code reuse
- Different ways in which we can understand a computer program
- The characteristics of the Python programming language
- How to implement a Python program that finds names in a file
- How to implement a Python program to average numerical values
- The ability to recognize all key components of a Python program
- The mathematical definition of set, sequence, relation, mapping
- The mathematical definition of the properties of integer addition
- How to mathematically specify the computation of an arithmetic mean
- The practical limitations of storing values in Python variables
- The data types commonly used to store values in Python variables
- The similarities and differences between simple and compound statements in Python
- How to correctly use comments to provide documentation for a Python program
- How to use conditional logic and iteration constructs in Python programs
- The similarities and differences between
for
andwhile
loops in Python - How to perform exponentiation in the Python programming language
- The inputs, outputs, and behavior of the
range
function in Python
- The source code needed to both define and call a function in Python
- How to use type hints to describe the types of a function's input and output
- How to use conditional logic to compute the absolute value of a number
- How to use Newton's method to calculate the square root of a number
- How to write either an equation or a Python function for the factorial sequence
- How to use either iteration or recursion to implement the factorial sequence
- The way in which higher-order functions can accept and create functions
- How to define and use a lambda function that squares an input number
- How to implement a function that computes the arithmetic mean of a list of numbers
- The definition of the following discrete structures:
- Pair
- Ordered pair
- n-Tuple
- Real-world examples of data values that can be stored in an ordered pair or an n-tuple
- How to define and populate tuples and lists in a Python program
- The similarities and differences between tuples and lists in a Python program
- How to define empty tuples and lists in a Python program
- How to append data to a list in a Python program
- How to pack and unpack a tuple in a Python program
- How to use Python functions to read and parse a comma-separate value (CSV) file
- The meaning of the term delimiter in the context of a CSV file
- The similarities and differences between CSV files and relational databases
- The definition of the following terms in the context of relational databases:
- Table
- Row
- Column
- Schema
- The properties of the sequence discrete structure and its manifestation in Python
- The formal definition of the monoid discrete structure
- An intuitive understanding of how monoids describe "string-like" discrete structures
- How to implement and use the higher-order sequence functions called
map
,reduce
, andfilter
- How to implement a list comprehension in the Python programming language
- An understanding of the similarities and differences between mutable and immutable contains in the Python programming language
- The similarities and differences between dynamically generated streams and static sequences in the Python programming language
- How to implement and use a generator expression in the Python programming language
- How to implement and use a generator function in the Python programming language
- The purpose of the
yield
statement in a generator function - The time and space overhead trade-offs associated with implementing a Python function that either returns a list of values or incrementally yields values
- How to implement an infinite stream and then request data from it
- How to "materialize" in a list the contents returned by a generator function
- The characteristics and operations of the set discrete structure
- Set union
- Set intersection
- Set difference
- An understanding of how the Python programming language uses hashing to implement sets and how this influences the types of content that a programmer can store in a set
- How to use set-theoretic operations to implement real-world programs in Python
- How to implement and use a set comprehension in the Python programming language
- As implemented in Python, the similarities and differences between the set, list, and tuple discrete structures
- Given a specific problem to implement, an understanding of how to pick a set, list, or tuple discrete structure to store the specified type of data elements
- The definition and application of the concept of a mapping
- An understanding of how the dictionary discrete structure stores key-value pairs
- How to implement a Python function that uses a dictionary to store and retrieve key-value pairs
- The restrictions that the Python programming language places on the storage of key-value pairs inside of a dictionary
- The benefits and limitations of a dictionary in comparison to other discrete structures such as a list or a tuple
- How to decide between implementing a Python program to use a dictionary or a function
- How to use a dictionary to add memoization to a Python function
- The time and space trade-offs associated with using a dictionary to add memoization to a Python function
- The definition of the multiset discrete structure and an understanding of how it is similar to and different than other discrete structures like a set
- An understanding of the mathematical concepts of a predicate and a relation
- How the Python programming language supports the implementation of objects that have both state (through variables) and behavior (through methods)
- How to define and create an instance of a class in the Python programming language
- How to define and call the constructor and methods of a Python class
- How to implement a Python program using the object-oriented programming paradigm
- How to implement a Python method to create a textual representation of an object
- How the Python execution environment stores objects in its memory