This project must be completed individually. Seeking or giving aid on this assignment is prohibited; doing so constitutes academic misconduct which can have serious consequences. The only resources you are allowed to consult are the ones listed below. If you are unsure about whether something is allowed, ask. The course syllabus contains more information about the course and university policies regarding academic honesty.
Ask if you are unsure whether a resource falls under one of these categories.
Projects 1, 2, and 3 in MCS 260 asked you to write programs following a precise specification, and these were primarily evaluated by the autograder.
Project 4 is different: It is an open-ended programming project where you have a lot of flexibility to determine what kind of program you'd like to write. What is important is that the program you choose to write:
Like the other projects, Project 4 will be collected in Gradescope, which will perform some basic checks to make sure the filenames meet the specifications given below. Manual review will account for the majority of the points on this assignment.
The overall grade breakdown is:
.py
file syntactically valid?)README.txt
The sooner you decide on your project topic, the sooner you can start working, and the more time you will have to complete Project 4. In order to receive full credit on the project, you must submit a project proposal by 11:59pm on Nov 17. The project proposal received by that time must show that you made a real attempt at a complete proposal; a submission that is woefully incomplete will not count for the purposes of grading.
Project proposals must be submitted using this online form, but don't submit the form until you read the rest of this document:
To access the form, you will need to be logged in with your netid@uic.edu
Google account. Try to open it now, so that you can determine whether you need any help with this.
The form asks you several questions about your project. In particular it asks for a:
pytest
test suite? Or is the main component of the project a module, and I should run a program that demonstrates how that module can be used? Are there input data files I need?)Within a day or two of submitting your project proposal, you will receive email notification either approving the proposal or indicating that some type of revision is needed.
If the initial submission results in a request for revision, you need to act promptly. To receive full credit on the project, you must submit a proposal by 11:59pm on Nov 23 that is ultimately approved.
To submit a revised proposal, use the same form as for the initial proposal.
When you submit to Gradescope, there are just two required files:
.py
file - All Python files need to meet the conditions described in the section about Python source below.README.txt
- Documentation as described in the section about documentation below.Depending on your topic, you may need to submit many files, including files of other types (e.g. JSON or CSV files, additional text files, many .py
files, ...).
The first three lines of every .py
file you submit must consist of comments in the format:
# MCS 260 Fall 2021 Project 4
# Full Name
# REPLACE THIS WITH YOUR INDIVIDUAL WORK DECLARATION
In the second line, replace Full Name
with your full name.
In the third line, replace the all-caps comment with a single full sentence, written in your own words, explaining that makes an accurate statement about whether or not you completed the project individually and followed the rules in the syllabus and project description.
If the all-caps placeholder sentence (REPLACE THIS WITH YOUR...
) is left in your final submission, there will be a significant point deduction, equivalent to omitting the entire header.
These comments should be immediately followed by a file-level docstring (as explained below).
Every .py
file, function, and class must have a docstring that describes its purpose.
Don't write docstrings in the style of "This program does X, Y, Z". Instead, shorten to "X, Y, and Z". Similarly, don't start a docstring with "This function" or "This class", but instead shorten to whatever you'd put after that phrase.
You are expected to choose variable names that communicate a variable's purpose in a concise way, but without being too terse. Uninformative low-effort names like intvar
or mystring
are not acceptable. Single-letter variable names can be used, but sparingly, and should usually be avoided for lists or other complex data structures. Most of the time, a good variable name will be a single word, compound word, or multiword name with _
separators, e.g. upcoming_events
or ingredients
or cyclelength
.
You are encouraged, but not required, to include comments that contain explanatory text.
Do not use comments to disable code that you don't want to run. Instead, remove such code before submitting.
range(len(...))
¶If you find yourself tempted to write range(len(...))
in your code, there is almost always a better way to accomplish the same thing. Contact the instructor for help with this, or to get permission if you are in one of the very unusual situations where range(len(...))
is a good idea.
Your submission to Gradescope must include a file named README.txt
.
That file must be a text file, written in full sentences, that describes the project in at least as much detail as the proposal, and which documents how it should be tested. This last point is extremely important:
When grading your project, I will look at README.txt
to determine what it is about and how I can try it out.
I will not look at the source code or proposal you submitted until later in the grading process.
If README.txt
is missing, or if I read README.txt
and cannot figure out how to use your program rather quickly, there will be a significant grading penalty.
You must be the sole author of the documentation. It should not consist primarily of quotations from documents of which you are not the author.
It must be possible to test your project using Python 3.9 on Windows 10 or Ubuntu Linux 20.04. If you know that your program requires one of these platforms (and doesn't work on the other), that should be indicated in the README.txt
file. The program's operation must not depend on any system-specific details such as the exact operating system version, the user name, or the name of the directory in which the program is run. If you have an explicit directory name in your code, such as C:\Users\jdoe47\Documents\mcs260\project4
, that probably won't work on my computer!
(If you develop on MacOS, it is very likely that your program will run on Ubuntu Linux 20.04 with no changes.)
Your program must not alter or write any files except:
README.txt
Your program can use modules that are in Python's standard library or which we discussed in MCS 260 lectures.
If you want to use any other module, you need to mention this in your proposal and receive approval.
Some programming projects (e.g. write a tic-tac-toe game) are so often assigned in introductory courses that hundreds of solutions and lots of related discussion can be found online. If you propose one of these "standard" topics, you will be asked to choose another topic or revise your proposal significantly. Basically, if an idea shows up prominently in a web search for something like "Python beginner project ideas", it will probably not be acceptable. This kind of web search is permissible to decide whether to rule out a project idea.
If many students submit a request for the same topic (or very similar topics), the latest-received proposal(s) will be asked to revise their topic. The goal is to avoid having large groups of students working on the same topic.
Here is a list of some "seeds" for projects that you could expand and develop into a proposal. You are not required to use one of these, and proposals based on a completely different topic of your own choosing are welcome. You are also free to modify any aspect of one of these ideas when you create your proposal, but be careful to avoid making a project idea dramatically simpler than the ones listed here. If your proposal falls below a certain minimum complexity threshold, I will request that you revise it.
geometry.py
module we built in Lecture. Also make it so that all shapes support addition to compute the bounding box of a pair of objects. Include a script demonstrating the features along with the module itself.Code filer - Imagine someone has a directory (e.g. mcs260
) full of Python source files for various purposes:
Write a program that finds all such .py
files and examines each one to try to determine where it should be filed in a more organized storage scheme, e.g.
worksheet6prob2.py
or ws6prob2.py
, or if it has a name like asdf.py
but mentions Worksheet 6 in a comment, then it should go in a directory named worksheet6
The program would be expected to copy files (e.g. using shutil.copyfile
) to new locations, rather than moving them. A good way to handle this would be to have the current directory with all the .py
files and the new directory where an organized hierarchy is to be created given as two command line arguments.
ast
module.os.stat()
to learn how to get the size of a file.11 oz powdered bhut jolokia chilies
or 1.5 c butter
and extracts the quantity, unit, and ingredient name from each line. Then, upon request, the program can do any of these things: (1) Convert from US/imperial units (cup, ounce, pound,...) to metric units (ml, g, ...), (2) Convert from metric to US/imperial units, (3) Multiply the recipe quantities by a given float (e.g. double or halve).If the project you submit has any of the following characteristics, it will receive a small bonus (up to 5 points) in the grading. The application of the bonus is at the discretion of the instructor, and the bonuses don't stack (you can't satisfy both and get 10 points). The final score will still be capped at 100%, but this bonus can make up for deficiencies elsewhere.