Final Project

by Elliott Hauser

08 Dec 2022

Choose one: Make either a Turtle game or a text-based data analysis utility. This project should combine most if not all of the knowledge you’ve learned this semester, and, armed with your preferred skills and knowledge, should serve as a testament to your new abilities as a coder! Lift-off here we come! :rocket:

Requirements

Both project types must use:

  • At least one external data file. For Turtle, this can be game settings, character data, or etc. For the data tool, this should be your data.
  • Dictionaries
  • Custom modules
  • definite (for) loops
  • Custom functions
  • A Python 3 or Pygame (Python 3 + GUI) Trinket. For Turtle projects only, a Python trinket with the #!/bin/python3 shebang enabled is acceptable.

Both must be:

  • readably coded
  • well commented
  • well organized
  • idiomatic
  • error-free
  • (largely) bug free. That is, your core use cases should work. Small bugs are OK but the quality level for the final should be higher than previous projects.

Both must have an extensive (1500 word+) reflection. In it, discuss the program you chose, your process, the skills and attitudes you used, and anything else that will help me evaluate what you’ve done.

Turtle games must:

  • Have a graphical user interface, responding to key and click events
  • Have a constantly available help dialog. This can take many forms but should allow the user to learn what they can do in the program at any time.
  • Display information about the program’s state such as score or level
  • Have at least 3 levels, increasing in difficulty
  • Extend a custom Turtle Class
  • Have a ‘win’ screen
  • Have an iterative interface. That is, the user should be able to perform any number of supported actions (such as playing the game over and over)
  • Use one or more custom images

For Turtle projects, I recommend building major improvements into your Game App (or reworking it). In your reflection, make sure to note your major improvements.

Data analysis projects must:

  • Have help text available somehow. For instance, if the user types ‘Help’, explain what they program can do.
  • have an iterative interface. That is, the user should be able to perform any number of supported actions and then exit the program.
  • Visualize data via text printouts. For instance:
# Raw data:

{'Fri': 20, 'Sat': 1, 'Thu': 6}

# Visualized:

Mon
Tue
Wed
Thu    ******
Fri    ********************
Sat    *
Sun
  • …or, if you prefer, use a supported third-party module such as matplotlib, pygal, bokeh, etc. to produce graphical output
  • (optional) Use a web-based public API to retrieve and display extra information (* do not use an API that requires authentication or a key; see me if you’re unsure about this)

For data analysis projects I recommend building an exploratory data analysis tool that will let users construct and print histograms and summary statistics (max, min, mean, etc) of data sets like the ones we’ve used. Email logs are one example, as is transaction data. You can re-use code and concepts from many of our homeworks to do this.

Use your knowledge of the data to provide as much insight and utility to your user as you can. You may need to find or construct a data dictionary: some way of turning codes in your data into human-readable information. For instance, you could teach your program that TX means "Texas" and display Texas to your user. This becomes very important if your data uses identifiers of some kind that most people won’t know how to interpret.

Data dictionary refers to a tool used in data analysis to convert identifiers into information. You will probably use Python’s dict data structure if you need to build one, but the concepts are distinct.

Note: If you’d like to get creative and make a text-based game, you may do so if it satisfies all of the requirements above. i.e. a text-based game should read from data files, visualize information, etc. The data files may be level descriptions or save game files, for instance, and the data visualized could be score, inventory, or game state.

Do not use help from classmates on this assignment. Document/cite any help you use that is not me, our class notes, or our text. Do not copy projects from prior sections of this class. Not only is it unethical, it’s trival for me to spot since each project is so unique.

Code Talk (REMOVED)

Record a 5 minute screenshare presentation of your program, descirption of your process/milestones, and reflection on what you’ve learned over the course of the semester. You may choose to embed this within your final post or submit it via Canvas. Panopto is the recommended/supported platform for this.

Criteria

Beyond the requirements, here are the main things I’m looking for when I assign grades:

  • Completion of intermetiate milestone assignments (to be assigned)
  • Code style
  • Code correctness (i.e. free of errors & bugs)
  • Trajectory of improvement over the semester
  • Usefulness and/or Fun of program, as a function of the core Python language features we’ve learned
  • Overall ability to make a Python program that does something useful and/or cool

This assessment will be based your substantial reflection post, the included code, and the recorded Code talk.

What to Turn in

Submit a pull request with your reflection and your program. This can also include your embedded video, or you can turn the video in separately. Please do not be late!

Elliott Hauser is an Assistant Professor at the UT Austin iSchool. He's hacking education as one of the cofounders of Trinket.io. Find Elliott Hauser on Twitter, Github, and on the web.