The expectations and grading for the Final Project differ from the grading expectations for labs, so please make sure to read the details below and ask questions!

Grading for the Final Project

Grading for the final project will be based loosely on the concept of specifications grading: your grade is dependent not on a specific allocation of points, but rather on whether your final submission meets a set of requirements, which we call a “bundle.” There are four possible bundles; the description of each is given in the next section. The number of bundles you complete determines the impact on your final course grade, as indicated in the following chart:

++Increase a Letter GradeBundles 1, 2, 3, 4
+Increase Half a Letter GradeBundles 1, 2, 3
*Keep Letter GradeBundles 1, 2
-Decrease Half a Letter GradeBundle 1
- -Decrease a Letter GradeNo Bundles / No Submission

For example, if your grade is calculated as an A based on all course materials other than the final project and you receive a grade of -- on the final project, your final course grade will be a B. If your grade is currently a C and you receive a grade of +, your final grade will be a C+, etc.

We expect that most students will aim for, and receive, a * (“Keep Letter Grade”) on the final project. Note that you cannot receive a grade higher than an A+ in the class (i.e. if you receive a ++ on the Final Project and have a working course grade of an A, you will receive an A+, but no higher grade).

Requirement Bundles

This section contains a detailed list of the requirements for each bundle. You must complete all the required bullets to receive credit for the given bundle. Bundles build on each other: to meet the requirements for Bundle 3, you must also meet the requirements for Bundles 1 and 2. It is your responsibility to check whether your submission meets the expectations of each bundle.

Bundle 1

This bundle consistutes the base requirements for the project:

  • The project is submitted by the deadline.
  • There is a clear effort to create an interactive system.
  • Your submission includes a completed ReadMe file describing how your project fulfills the requirements.
  • At least one of the Project Proposal, Progress Report, and Documentation is submitted by the deadline.
  • Your interactive system contains the following components:
    • Variables and assignment
    • Conditional statements (i.e., if/elif/else)
    • Strings
    • Use of a module (either one you’ve written, or a built-in Python module like math)
    • A main() function and if __name__ == "__main__"

Bundle 2

In addition to meeting all requirements for Bundle 1, your project satisfies the following requirements:

  • The program provides a way to accept input from a user and produce output for them.
  • Your interactive system involves a nontrivial computation or transformation of user input.
  • Your interactive system demonstrates four out of five of the following features:
    1. Appropriate use of functions and/or class methods
      • At least one function includes a parameter (for methods: a parameter in addition to self).
      • At least one function includes a return statement.
      • There are least two functions in addition to main().
    2. Appropriate use of for and/or while loops.
    3. An application of explicitly nested loops:
      • Your system must include at least one feature that makes use of a loop nested within another loop, all in the same function.
      • The nested loop should be used to accomplish a task needed for your project.
    4. Appropriate use of a dictionary or a list of lists:
      • Start with an empty/blank instance of the data structure (e.g., [] or {}) and add data relevant to your application.
      • Add/remove elements from it in your code.
      • Use the object to accomplish a task needed for your project.
    5. Appropriate use of a user-defined class you wrote:
      • Define a class.
      • Create at least one object using your class.
      • Use the object to accomplish a task needed for your project.
  • Your code contains comments and docstrings which explain the behavior of different system elements.
  • Your code must run, but can produce some errors.
  • You must complete two out of three of the Proposal, Progress Report, and Documentation and submit by their respective deadlines.

Bundle 3

In addition to meeting all requirements for Bundle 2, your project satisfies the following requirements:

  • The program handles incorrect user input elegantly (i.e., does not allow the program to continue if the user does not provide correct input, prints a message communicating why the input is incorrect, and allows the user to try again).
  • The code is divided into multiple files and functions according to good design principles.
    • Uses a minimum of four functions (main() plus three others)
  • Conditional statements handle exclusive choice correctly (i.e., elif and else are properly used instead of a “waterfall” of separate if statements).
  • Functions compute extensively on the complex data structure(s).
    • Multiple functions have parameters and return statements.
    • At least one function uses or modifies a nested list, dictionary or user-defined object.
    • No global data structure(s) exist.
  • Your code runs without any meaningful errors.

Bundle 4

The requirements of this bundle are:

  • Your code is well-documented (for instance, each function includes a meaningful docstring).
  • Incorrect user input is handled using try/except where appropriate.
  • Your code is well-abstracted and extensible (for instance, your instructor could easily add a new feature or modify an existing one in the corresponding function definition).
  • You submit all three of the Proposal, Progress Report, and Documentation by their respective deadlines.
  • Your code runs without any errors whatsoever.
  • Your code goes above and beyond the requirements of the previous bundles.

Written Deliverables

The bundles above reference important documentation expectations. These elements are crucial to the process of completing the final project and communicating your goals to your instructor and course staff.

Project Proposal

The project proposal should be written in It should describe (1) the title of your project, (2) a 3-5 sentence summary of the project, and (3) your intermediate goal(s) for the following week. Your instructor will review your proposal and provide feedback on whether you are ready to get started or if a brief follow-up meeting is needed to clarify or refine any points.

Progress Report

To help you stay on schedule, you will write a brief Progress Report in the file named This file will ask you to reflect on your effort to complete the intermediate goal(s) outlined in your and your effort towards satisfying bundle criteria. Credit will be awarded based on completion. Similar to the Proposal stage, you will receive some timely feedback from your instructor. Consequently, this exercise is most beneficial if you’ve made your best effort to meet your goals.


Writing good documentation is a critical part of being a conscientious coder (it also encourages other people to extend your work when you create software applications for broader use!). As part of your project, you will create a file that outlines the operation and use of your program. It should provide a clear description of how to run your code, any inputs that are required, and the expected output. You should make every effort to rid your code of bugs, but sometimes there are bugs that refuse to be handled. If this happens, you should note the issue in your and describe the workaround you are using to keep your program operating.

README with Self-assessment

You must submit a README file with your final project. In addition to customary questions about collaboration and the Honor Code, the final project README involves a self-assessment checklist in which you indicate which bundles you have achieved and explain how your project fulfills the requirements for these bundles. The purpose of this exercise is to make sure everyone understands how the project is graded. Note that the self-assessment is a requirement for all bundles. Please make sure to review it in advance of submitting, and budget sufficient time to fill it out.

Notes on Expectations

Please note that none of the above requirements for the Final Project are specific to the type of interactive system you are building. The choice of interactive system is yours to make and to be excited about. However, as the summative assignment in this class, we are focused primarily on the programming, design, and problem solving skills you learn during the final project, not necessarily on whether your system achieves your stated human goals. For instance, a Backgammon game that violates most of the game rules of Backgammon in favor of good design can still recieve a + or ++ grade.

Honor Code Policies

Given the open-endedness of the final project, below we reiterate guidelines around usage of external sources. Generally speaking, plagiarism of other students and/or external sources on the final project will result in a “No Submission” score. Final projects are final – Honor Code violations will not include the opportunity to revise and resubmit.

  • Classmates: As with your labs, the final project is a solo effort. You are welcome and encouraged to chat with your classmates about abstract ideas, but you should not share code or discuss code details with current/former students. You are, of course, welcome to get feedback on your code from lab helpers, tutors, or your instructor.

  • External libraries/modules: During the assignment, you may request permission to use external libraries for your final project idea (e.g., tkinter to create graphical user interfaces). If you do so, you must cite your sources, describe what specific webpages/tutorials you used, and explain how your project differs from those tutorials. Please include this information in the “References” section of your file.

  • Online references: Copying code that you do not understand is considered an Honor Code violation. You are allowed to adapt small snippets (< 5 lines of code) with citations but not take someone else’s overall problem solving approach. There is a difference between googling for syntax details (e.g., similar to what you’d find in the Runestone textbook) versus a sample application design.

As always, please do not hesitate to reach out to the teaching team with questions prior to the final submission deadline.

Due Dates

Due dates for each of the components above will be listed in the associated files in your GitHub repository.

REMINDER: Unless you have been approved for an educational or emergency incomplete, your professor cannot accept work after the college’s offical final exam deadline. Final exam deadlines vary depending on what section of CSCI 150 you are enrolled in and can be found on your CSCI 150 schedule/syllabus and Oberlin website.