Project 0: Python, Setup, & Autograder Tutorial
Table of contents
- Introduction
- Python Installation
- Workflow/ Setup Examples
- Python Basics
- Autograding
- Q1: Addition
- Q2: buyLotsOfFruit function
- Q3: shopSmart function
- Submission
Introduction
Projects in this class use Python 3.
Project 0 will cover the following:
- Instructions on how to set up Python,
- Workflow examples,
- A mini-Python tutorial,
- Project grading: Every project’s release includes its autograder that you can run locally to debug. When you submit, the same autograder is ran.
Files to Edit and Submit: You will fill in portions of addition.py
, buyLotsOfFruit.py
, and shopSmart.py
in this GitHub repo during the assignment. Once you have completed the assignment, you will submit a token generated by the autograder to Gradescope.
Evaluation: Your code will be autograded for technical correctness. Please do not change the names of any provided functions or classes within the code, or you will wreak havoc on the autograder. However, the correctness of your implementation – not the autograder’s judgements – will be the final judge of your score. If necessary, we will review and grade assignments individually to ensure that you receive due credit for your work.
Project Policy: Please refer to the course policies page.
Python Installation
We highly advise using Python within a newly created Conda environment for each project in order to avoid conflicts between dependencies. To set this up, follow the steps below:
-
Install Conda, an open-source package management system that can help manage different environments for different projects.
-
Once installed, create a new Conda environment with Python version 3.8. You can do this by opening your terminal (or command prompt on Windows) and running the following command:
conda create -n cs188proj0 python=3.8
This command creates a new environment called cs188proj0
that uses Python 3.8.
- You can activate the environment by executing:
conda activate cs188proj0
Workflow/ Setup Examples
You are not expected to use a particular code editor or anything, but here are some suggestions on convenient workflows (you can skim both for half a minute and choose the one that looks better to you):
- GUI and IDE, with VS Code shortcuts. You are highly encouraged to read the Using an IDE section if using an IDE to learn convenient features.
- In terminal, using Unix commans and Emacs (this is fine to do on Windows too). Useful to be able to edit code on any machine without setup, and remote connecting setups such as using the instructional machines.
Python Basics
If you’re new to Python or need a refresher, we recommend going through the Python basics tutorial.
Autograding
To get you familiarized with the autograder, we will ask you to code, test, and submit your code after solving the three questions.
You have two options for accessing all the files required for Project 0, which is an autograder tutorial:
-
Clone the GitHub repository: Navigate to the BerkeleyAI Project-0-Su23 GitHub page and use the “Clone” option to download the files directly to your local environment.
-
Download and unzip the project files: Follow this link to download a ZIP file of the project. After downloading, extract the contents of the ZIP file to access the project files.
This contains a number of files you’ll edit or run:
addition.py
: source file for question 1buyLotsOfFruit.py
: source file for question 2shop.py
: source file for question 3shopSmart.py
: source file for question 3autograder.py
: autograding script (see below)
and others you can ignore:
test_cases
: directory contains the test cases for each questiongrading.py
: autograder codetestClasses.py
: autograder codetutorialTestClasses.py
: test classes for this particular projectprojectParams.py
: project parameters
The command python autograder.py
grades your solution to all three problems. If we run it before editing any files we get a page or two of output:
Click to see full output of python autograder.py
[cs188-ta@nova ~/tutorial]$ python autograder.py
Starting on 1-21 at 23:39:51
Question q1
===========
*** FAIL: test_cases/q1/addition1.test
*** add(a, b) must return the sum of a and b
*** student result: "0"
*** correct result: "2"
*** FAIL: test_cases/q1/addition2.test
*** add(a, b) must return the sum of a and b
*** student result: "0"
*** correct result: "5"
*** FAIL: test_cases/q1/addition3.test
*** add(a, b) must return the sum of a and b
*** student result: "0"
*** correct result: "7.9"
*** Tests failed.
### Question q1: 0/1 ###
Question q2
===========
*** FAIL: test_cases/q2/food_price1.test
*** buyLotsOfFruit must compute the correct cost of the order
*** student result: "0.0"
*** correct result: "12.25"
*** FAIL: test_cases/q2/food_price2.test
*** buyLotsOfFruit must compute the correct cost of the order
*** student result: "0.0"
*** correct result: "14.75"
*** FAIL: test_cases/q2/food_price3.test
*** buyLotsOfFruit must compute the correct cost of the order
*** student result: "0.0"
*** correct result: "6.4375"
*** Tests failed.
### Question q2: 0/1 ###
Question q3
===========
Welcome to shop1 fruit shop
Welcome to shop2 fruit shop
*** FAIL: test_cases/q3/select_shop1.test
*** shopSmart(order, shops) must select the cheapest shop
*** student result: "None"
*** correct result: "<FruitShop: shop1>"
Welcome to shop1 fruit shop
Welcome to shop2 fruit shop
*** FAIL: test_cases/q3/select_shop2.test
*** shopSmart(order, shops) must select the cheapest shop
*** student result: "None"
*** correct result: "<FruitShop: shop2>"
Welcome to shop1 fruit shop
Welcome to shop2 fruit shop
Welcome to shop3 fruit shop
*** FAIL: test_cases/q3/select_shop3.test
*** shopSmart(order, shops) must select the cheapest shop
*** student result: "None"
*** correct result: "<FruitShop: shop3>"
*** Tests failed.
### Question q3: 0/1 ###
Finished at 23:39:51
Provisional grades
==================
Question q1: 0/1
Question q2: 0/1
Question q3: 0/1
------------------
Total: 0/3
Your grades are NOT yet registered. To register your grades, make sure
to follow your instructor's guidelines to receive credit on your project.
For each of the three questions, this shows the results of that question’s tests, the questions grade, and a final summary at the end. Because you haven’t yet solved the questions, all the tests fail. As you solve each question you may find some tests pass while other fail. When all tests pass for a question, you get full marks.
Looking at the results for question 1, you can see that it has failed three tests with the error message “add(a, b) must return the sum of a and b”. The answer your code gives is always 0, but the correct answer is different. We’ll fix that in the next tab.
Q1: Addition
Open addition.py
and look at the definition of add
:
def add(a, b):
"Return the sum of a and b"
"*** YOUR CODE HERE ***"
return 0
The tests called this with a and b set to different values, but the code always returned zero. Modify this definition to read:
def add(a, b):
"Return the sum of a and b"
print("Passed a = %s and b = %s, returning a + b = %s" % (a, b, a + b))
return a + b
Now rerun the autograder (omitting the results for questions 2 and 3):
[cs188-ta@nova ~/tutorial]$ python autograder.py -q q1
Starting on 1-22 at 23:12:08
Question q1
===========
*** PASS: test_cases/q1/addition1.test
*** add(a,b) returns the sum of a and b
*** PASS: test_cases/q1/addition2.test
*** add(a,b) returns the sum of a and b
*** PASS: test_cases/q1/addition3.test
*** add(a,b) returns the sum of a and b
### Question q1: 1/1 ###
Finished at 23:12:08
Provisional grades
==================
Question q1: 1/1
------------------
Total: 1/1
You now pass all tests, getting full marks for question 1. Notice the new lines “Passed a=…” which appear before “*** PASS: …”. These are produced by the print statement in add
. You can use print statements like that to output information useful for debugging.
Q2: buyLotsOfFruit function
Implement the buyLotsOfFruit(orderList)
function in buyLotsOfFruit.py
which takes a list of (fruit,numPounds)
tuples and returns the cost of your list. If there is some fruit
in the list which doesn’t appear in fruitPrices
it should print an error message and return None
. Please do not change the fruitPrices
variable.
Run python autograder.py
until question 2 passes all tests and you get full marks. Each test will confirm that buyLotsOfFruit(orderList)
returns the correct answer given various possible inputs. For example, test_cases/q2/food_price1.test
tests whether:
Cost of [('apples', 2.0), ('pears', 3.0), ('limes', 4.0)] is 12.25
Q3: shopSmart function
Fill in the function shopSmart(orderList,fruitShops)
in shopSmart.py
, which takes an orderList (like the kind passed in to FruitShop.getPriceOfOrder
) and a list of FruitShop
and returns the FruitShop
where your order costs the least amount in total. Don’t change the file name or variable names, please. Note that we will provide the shop.py
implementation as a “support” file, so you don’t need to submit yours.
Run python autograder.py
until question 3 passes all tests and you get full marks. Each test will confirm that shopSmart(orderList,fruitShops)
returns the correct answer given various possible inputs. For example, with the following variable definitions:
orders1 = [('apples', 1.0), ('oranges', 3.0)]
orders2 = [('apples', 3.0)]
dir1 = {'apples': 2.0, 'oranges': 1.0}
shop1 = shop.FruitShop('shop1',dir1)
dir2 = {'apples': 1.0, 'oranges': 5.0}
shop2 = shop.FruitShop('shop2', dir2)
shops = [shop1, shop2]
test_cases/q3/select_shop1.test
tests whether: shopSmart.shopSmart(orders1, shops) == shop1
and test_cases/q3/select_shop2.test
tests whether: shopSmart.shopSmart(orders2, shops) == shop2
Submission
After you have successfully passed all test cases in your local autograder, you’re ready to prepare your project for submission. To do this, follow the steps below:
-
Generate a submission token: Run the following command in your terminal to create a token for submission:
python submission_autograder.py
If the script runs without any issues, it will produce a
tutorial.token
file in your current directory. -
Submit your project: Take the
tutorial.token
file and upload it to the “Project 0” entry on Gradescope.
Remember, the tutorial.token
file is crucial for your project submission. It verifies your work on the autograder and is necessary for the evaluation process.