Deliverables

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.

The final project has an effect on your final course grade as follows. If your grade is calculated to an A with all course materials other than the final project and you receive a grade of -- on the final project, your 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. Notably, 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).

We will use the following chart to allocate your grade according to the requirements below:

GradeEffectRequirements
++Increase a Letter GradeBundles 1, 2, 3, 4, 5
+Increase Half a Letter GradeBundles 1, 2, 3, 4
*Keep Letter GradeBundles 1, 2, 3
-Decrease Half a Letter GradeBundles 1, 2
- -Decrease a Letter GradeBundle 1
- - -Decrease a Letter Grade and a HalfNo Bundles / No Submission

Requirement Bundles

According to the grading scheme above, your final project should meet a set of requirements, which we call “bundles”. The description of each bundle is below. You must complete all the required bullets to receive credit for the given bundle - bundles do build on each other, so if you meet the requirements for Bundle 3, you most likely will meet the requirements for Bundles 1 and 2, but 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
  • At least one of the Project Proposal, Progress Report, and Documentation is submitted

Bundle 2

The requirements of this bundle are:

  • Your interactive system contains the following components:
    • Variables and assignment
    • Conditional statements (i.e., if/elif/else)
    • Strings
    • Use a module (either one you’ve written, or a built-in Python module like math)
    • A main() function and if __name__ == "__main__"
  • Complete two out of three of the Proposal, Progress Report, and Documentation

Bundle 3

The requirements of this bundle are:

  • Your interactive system contains four of the five following components:
    1. Comments and docstrings which explain the behavior of different system elements
    2. 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
      • At least two functions in addition to main()
    3. A way to accept input from a user and produce output for them
    4. Explicitly nested loops:
      • You must make appropriate use of for and/or while loops
      • Your system must include at least one feature that makes use of a loop nested within another loop, all in the same function
    5. Create and compute with a complex data structure, defined as either: dictionaries, a class you wrote, list of lists
      • You must start with an empty/blank instance of the data structure (e.g., []) and then add/remove at least one element from it in your code
  • Your code must run, but can produce some errors

Bundle 4

The requirements of this bundle are:

  • Your interactive system contains the following components, and all components in Bundle 3:
    • 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)
    • Code is divided into multiple files and functions according to good design principles
      • Minimum four total 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
      • No global data structure(s) exist
  • Your code runs without any meaningful errors

Bundle 5

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
  • 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
  • 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 PROPOSAL.md. 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 PROGRESS.md. This file will ask you to reflect on your effort to complete the intermediate goal(s) outlined in your PROPOSAL.md 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.

Documentation

Writing good documentation is a critical part of being a conscientious coder. As part of your project, you will create a DOCS.md 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 DOCS.md and describe the workaround you are using to keep your program operating.

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.

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 registrar website.