Project Overview

The final project gives you the experience of building an interactive system starting from the design stage and finishing with a working prototype!

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

General Guidelines

The goal for the final project is to build an new interactive system. In the context of this class, a good final project interactive system will:

  • Request input from a user, either via the command line or an external file uploaded by the user
  • Perform a nontrivial computation that transforms the input and / or creates a model based on the input
  • Produce a new kind of output
  • Present that output to the user

In addition to the basic framework above, your final project should demonstrate mastery over the tools and concepts introduced throughout class (including, for example, making use of complex data structures – see the following section for a detailed breakdown of requirements).

Project Examples

Successful previous projects that meet these criteria are:

  • Implementations of a 2D game (e.g., a card game for a user to play against a computer or an ASCII adventure game with supplementary graphics)
  • Using the picture module to generate art based on user input
  • Creating an animation to simulate a phenomenon from the natural sciences

What Counts as a “New Interactive System”?

There are many great personal (or Winter Term) projects that do not fall into the category of building interactive systems (e.g. learning a new Python library or a new programming language).

There are also many excellent projects that are not new in that it is easy to find dozens of implementations of them on the web already. Examples that fall into this category include:

  • Tic Tac Toe
  • Hangman
  • Mad Libs
  • Blackjack
  • Poker
  • 2048
  • Wordle
  • Rock Paper Scissors

Generally, if you can Google your project idea and easily find a Python implementation of it, you should probably consider another option. If this is the case for a project that you had your heart set on, you may be able to solve this problem by introducing a unique modification. For example, there are many, many Python implementations of Blackjack on the web, but you might make a unique version that uses the picture module, or modifies the rules in some way.

Finally, it’s important that your project involve some kind of nontrivial computation or transformation of the user input. What counts as nontrivial can be a judgment call depending on the type of project you are proposing. However, the following examples would definitely not meet this criteria:

  • A program that asks the user to choose from a list of pictures that have been coded / drawn in advance, then displays the selected picture.
  • A program that asks for the user’s birthday and displays one of a fixed number of prewritten horoscopes.
  • Roulette, or any game in which the computation consists entirely of checking whether the user has correctly guessed a random number generated by the program.

Of course, all of these ideas could be modified to add a nontrivial component.

If you have any questions about what counts as a viable project, just ask! To make sure expectations are clear before you start coding, you will begin by writing a project proposal and receiving feedback on it from your instructor. See the next page for more specifics.