This repository holds topic summaries and questions for some Lewis & Clark computer science courses that use the Python programming language.
We have three purposes in creating this repository:
- To keep our own notes and useful links organized.
- To provide a place where we can direct students' frequently-asked questions.
- To provide a bank of questions and answers, which both serves as a study guide and makes exam creation easier. Answers are provided, but there should be so many questions that memorizing all of the answers is infeasible.
We list additional online and print resources where applicable, trying to list the most valuable ones first. In general, print resources go into more depth or provide a more gentle explanation.
Questions are rated according to their difficulty:
- ⭐ By the end of the course in question, you should be able to answer these questions immediately off the top of your head. They often involve terminology or basic concepts.
- ⭐⭐ These questions may take a bit of thought, close reading, experimentation, or research.
- ⭐⭐⭐ These questions require even more thought.
The table below shows which topics are covered in which courses. Links are to existing pages in Pythonorama. CS 171 is taught in C, but the concepts are very similar between C and Python. DSCI 140 is taught in Python by Peter Drake, but in R by some other instructors.
Topic | CS 171 (CS1) |
CS 172 (CS2) |
CS 369 (AI & ML) |
CS 383 (Algo) |
CS 488 (SofDev) |
DSCI 140 (DataSci) |
---|---|---|---|---|---|---|
Basic Python Cheat Sheet | x | x | x | x | x | x |
NumPy/Pandas/Matplotlib Cheat Sheet | x | x | ||||
Development Tools | ||||||
Command Line | x | x | x | x | ||
Visual Studio Code | x | |||||
PyCharm | x | x | x | |||
Git | x | |||||
Jupyter / Google Colab | x | |||||
Control Structures | ||||||
Your First Program | x | x | x | x | x | x |
If Statements | x | x | x | x | x | x |
Loops | x | x | x | x | x | x |
Functional Decomposition | x | x | x | x | x | x |
Recursion | x | x | x | x | ||
Higher-Order Functions | x | x | x | |||
Data Structures | ||||||
Built-in Types | x | x | x | x | x | x |
Operators | x | x | x | x | x | x |
Variables | x | x | x | x | x | x |
Strings | x | x | x | x | x | x |
Lists | x | x | x | x | x | x |
References | x | x | x | x | x | |
Equality | x | x | x | x | x | |
Tuples | x | x | x | x | x | |
Sets | x | x | x | x | x | |
Dictionaries | x | x | x | x | x | |
Abstract Base Classes | x | |||||
Stacks | x | x | x | |||
Queues | x | x | x | |||
Array-based Structures | x | x | ||||
Linked Structures | x | x | ||||
Trees | x | x | x | x | x | |
Graphs | x | x | x | x | ||
Binary Search Trees | x | |||||
Hash Tables | x | |||||
Priority Queues | x | |||||
Union-Find | x | |||||
Algorithms | ||||||
Analysis of Algorithms | x | x | ||||
Search | x | x | ||||
Traversal | x | x | x | |||
Algorithmic Strategies | x | |||||
Sorting | x | |||||
Graph Algorithms | x | |||||
Style | ||||||
Documentation | x | x | x | |||
Omitting Needless Code | x | x | x | |||
Names | x | x | x | x | x | x |
Defensive Programming | x | |||||
Object-Oriented Programming | ||||||
Classes and Initializers | x | x | x | x | ||
Methods | x | x | x | x | ||
Magic Methods | x | x | x | |||
Inheritance | x | |||||
Packages | x | |||||
Exceptions | x | |||||
Libraries | ||||||
stdlib | x | |||||
tkinter | x | x | ||||
matplotlib | x | |||||
numpy | x | x | ||||
pandas | x | x | ||||
scikit-learn | x | x | ||||
tensorflow | x | |||||
Software Development | ||||||
Time Management | x | x | x | x | x | x |
Iterative Development | x | x | x | x | x | |
Pair Programming | x | x | x | |||
Testing | x | x | x | |||
Debugging | x | x | x | x | x | |
Teamwork | x | x | x | |||
Extreme Programming | x | |||||
UML | x | |||||
Object-Oriented Design | x | |||||
Design Patterns | x |