联系方式

您当前位置:首页 >> Python编程Python编程

日期:2024-06-04 09:51

Assignment 1

CSCA08 Assignment 1: The Store

Due Date: June 14, 2024 at 6pm.

Goals of this Assignment

Use the Function Design Recipe (?wrap=1)

(/download?download_frd=1) to plan,

implement, and test functions.

Write function bodies using variables, numeric types, strings, and conditional statements. (You

can do this whole assignment with only the concepts from Weeks 1, 2, and 3 of the course.)

Learn to use Python 3, Wing 101, provided starter code, a checker module, and other tools.

Starter Code

For this assignment, you are provided some files, including Python starter code files. Please

download the Assignment 1 files (h?wrap=1)

(h/download?download_frd=1) and extract the zip

archive.

There are two starter code Python files and a Python program that helps you check (not fully

test!) your solutions for Python style violations:

store.py

This file contains some code that sets up your use of constants from constants.py, solutions

for some required functions for you to use as examples, as well as headers and docstrings

(but not bodies) for some functions you are required to write, to help you get started. Your

job is to complete this file.

constants.py

This file contains some useful constants that you should use in your solution. You will not

modify this file.

a1_checker.py

This is a checker program that you should use to check your code. See below for more

information.

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

1/10

Constants

Constants are special variables whose values should not change once assigned. A different

naming convention (uppercase pothole) is used for constants, so that programmers know to not

change their values. For example, in the starter code, the constant AGE is assigned the value of 4

and this value should never change in your code. When writing your code, if you need to use the

index at which a customer  s string representation contains their age, you should use AGE and not

the value 4. The same goes for the other constant values.

Using constants simplifies code modifications and improves readability and changeability. For

example, if we later decide to change the index at which a product  s string representation contains

their ID, we will only have to make the changes in one place, rather than throughout the program.

This also makes our code more readable.

You should read the file constants.py carefully to understand the purpose of each defined

constant. You must use these constants in your code and not the literal values. For example, you

must use AGE instead of 4 to earn full marks.

The Store

In this assignment, you will write functions to represent a store. In this store, there are products,

customers, and shopping lists.

A product is represented by a string, where each piece of the string will represent different bits of

information about the product. This string will contain the following information:

The product ID

How many of the product are available to purchase (current inventory)

What type of discount is associated with the product

The product  s price

A customer will also be represented by a string. This string will contain the following information:

The customer ID

The customer  s age

The customer  s budget

A shopping list will also be represented by a string, containing the following information:

A product ID

How many of the product to purchase

Products, customers, and shopping lists

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

2/10

A valid product will have 12 characters. The index ranges of a product are explained below:

Characters at indices from PID to PID+3, inclusive, represent the product ID. These four

characters will be digits.

Characters at indices from INV to INV+1, inclusive, represent the current product inventory.

These two characters will be digits. For single-digit inventories, the character at the index INV

will be   0  .

Characters at indices from DISC to DISC+2, inclusive, represent the type of discount for this

product. These 3 characters will be letters. Specifically, there are 4 types of discounts, each

relevant for a specific customer age range (in years, inclusive):   ALL   (any age),   TEE   (13-19),

 SEN   (65+), and   NON   (no discount at all). Each of these discounts will apply the discount

rate, DISCOUNT_RATE.

Characters at indices PRICE to PRICE+2, inclusive, represent the product  s price. These three

characters will be digits. For single-digit prices, the characters from indices PRICE to

PRICE+1, inclusive, will be   00  . For double-digit prices, the character at index PRICE will be

 0  .

A couple examples of valid products below:

Assuming PID = 0, INV = 4, DISC = 6, PRICE = 9, a product represented by

 372908ALL147   has an ID of   3729  , a current inventory of 8, will be discounted for

customers of any age, and is priced at $147.

Assuming PID = 5, INV = 3, DISC = 9, PRICE = 0, a product represented by

 032990184TEE   has an ID of   0184  , a current inventory of 99, will be discounted for

customers between the ages of 13-19, inclusive, and is priced at $32.

A valid customer will have 9 characters. The index ranges of a customer are explained below:

Characters at indices from CID to CID+3, inclusive, represent the customer ID. These four

characters will be letters.

Characters at indices from AGE to AGE+1, inclusive, represent the customer  s age. These two

characters will be digits. For single-digit ages, the character at the index AGE will be   0  .

Characters at indices from BUDGET to BUDGET+2, inclusive, represent the customer  s

budget. These 3 characters will be digits. For single-digit budgets, the characters from indices

BUDGET to BUDGET+1, inclusive, will be   00  . For double-digit budgets, the character at

index BUDGET will be   0  .

A couple examples of valid customers below:

Assuming CID = 0, AGE = 4, BUDGET = 6, a customer represented by   MARK17008   has

an ID of   MARK  , is 17 years old, and has a budget of $8.

Assuming CID = 5, AGE = 0, BUDGET = 2, a customer represented by   64999ABCD   has

an ID of   ABCD  , is 64 years old, and has a budget of $999.

A valid shopping list will have 6 characters. The index ranges of a shopping list are explained

below:

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

3/10

Characters at indices from SPID to SPID+3, inclusive, represent the product ID. These four

characters will be digits.

Characters at indices from PURCHASE_NUM to PURCHASE_NUM+1, inclusive, represent

how many of the product to purchase. These two characters will be digits. For single-digit

purchases, the character at the index PURCHASE_NUM will be   0  .

A couple examples of valid shopping lists below:

Assuming SPID = 0, PURCHASE_NUM = 4, a shopping list represented by   018427   asks

to buy 27 of the product with an ID of   0184  .

Assuming SPID = 2, PURCHASE_NUM = 0, a shopping list represented by   043309   asks

to buy 4 of the product with an ID of   3309  .

What to do

In the starter code file store.py, complete the following function definitions. Note that some are

already provided for you to use as examples! Use the Function Design Recipe that you have

been learning in this course. We have included the type contracts in the following table; please

read through the table to understand how the functions will be used.

We will be evaluating your docstrings in addition to your code. You must include at least two

examples in each docstring. You will need to paraphrase the full descriptions of the functions to

get an appropriate docstring description. Your docstring examples should be valid doctests    we

will run them as part of the evaluation of your program.

Functions to write for A1

Function Name:

(Parameter types) ->

Return type

Description (paraphrase to get a proper

docstring description)

get_pid:

(str) -> str

The parameter represents a product. The

function should return the ID of the given

product.

You may assume the given product is valid.

get_inventory:

(str) -> int

The parameter represents a product. The

function should return the current inventory of

the given product.

You may assume the given product is valid.

get_discount: The parameter represents a product. The

function should return the type of discount for

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

4/10

(str) -> str the given product.

You may assume the given product is valid.

get_price:

(str) -> int

The parameter represents a product. The

function should return the price of the given

product.

You may assume the given product is valid.

get_cid:

(str) -> str

The parameter represents a customer. The

function should return the ID of the given

customer.

You may assume the given customer is valid.

get_age:

(str) -> int

The parameter represents a customer. The

function should return the age of the given

customer.

You may assume the given customer is valid.

get_budget:

(str) -> int

The parameter represents a customer. The

function should return the budget of the given

customer.

You may assume the given customer is valid.

get_spid:

(str) -> str

The parameter represents a shopping list.

The function should return the product ID of

the given shopping list.

You may assume the given shopping list is

valid.

get_purchase_num:

(str) -> int

The parameter represents a shopping list.

The function should return how many of the

product to purchase for the given shopping

list.

You may assume the given shopping list is

valid.

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

5/10

check_discount_eligibility:

(str, str) -> bool

The first parameter represents a product. The

second parameter represents a customer.

The function should return True if and only if

this customer is eligible for a discount on this

product.

You may assume the given product and

customer are valid.

calc_discounted_price:

(str, str) -> int

The first parameter represents a product. The

second parameter represents a customer.

The function should return the price of the

given product after any discounts the given

customer is eligible for, rounded to the

nearest integer.

You may assume the given product and

customer are valid.

calc_total_price:

(str, str, str) -> int

The first parameter represents a product. The

second parameter represents a customer.

The third parameter represents a shopping

list. This function should return the total price

of the given product after any discounts this

customer is eligible for, according to the

number of products noted on the given

shopping list, rounded to the nearest integer.

You may assume the given product,

customer, and shopping list are valid. You

may assume the given product has the same

ID as the product ID on the given shopping

list.

Hint: use your completed

calc_discounted_price function.

check_available_inventory:

(str, str) -> bool

The first parameter represents a product. The

second parameter represents a shopping list.

This function should return True if and only if

the store has enough current inventory of the

given product to fulfil the amount of it to be

bought on the given shopping list.

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

6/10

You may assume the given product and

shopping list are valid. You may assume the

given product has the same ID as the product

ID on the given shopping list.

within_budget:

(str, str, str) -> bool

The first parameter represents a product. The

second parameter represents a customer.

The third parameter represents a shopping

list. This function should return True if and

only if the given customer has enough budget

to purchase the amount of the given product

on their given shopping list.

You may assume the given product,

customer, and shopping list are valid. You

may assume the given product has the same

ID as the product ID on the given shopping

list.

checkout:

(str, str, str) -> bool

The first parameter represents a product. The

second parameter represents a customer.

The third parameter represents a shopping

list. This function should return True if and

only if the given customer can successfully

check out, ie the given customer has enough

budget to purchase the amount of the given

product on their given shopping list and there

is enough current inventory of the given

product in the store.

You may assume the given product,

customer, and shopping list are valid. You

may assume the given product has the same

ID as the product ID on the given shopping

list.

change_inventory:

(str, str) -> str

The first parameter represents a product. The

second parameter represents a shopping list.

This function returns a new product string in

the same format as the given product with an

updated inventory based on how many of the

product are being bought as per the given

shopping list. If there isn  t enough inventory,

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

7/10

the purchase will not be made, ie the

inventory should not change.

You may assume the given product and

shopping list are valid. You may assume the

given product has the same ID as the product

ID on the given shopping list.

change_price:

(str, int) -> str

The first parameter represents a product. The

second parameter represents a price. This

function returns a new product string in the

same format as the given product with an

updated price, as given.

You may assume the given product is valid.

You may assume the given price is valid for a

product string.

compare_products:

(str, str) -> str

The first parameter represents a product,

 product1  . The second parameter represents

another product,   product2  . This function

returns the product ID of the   better   of the

two given products.   product1   is the   better  

product if and only if:

Each digit of   product1    s ID is greater

than the respective digit of   product2    s ID,

except for the third digit

The current inventory of   product1   is at

least as much as the current inventory of

 product2  

The price of   product1   is lower than that

of   product2  

You may assume the given products are

valid.

Using Constants

As we discuss in section Constants above, your code should make use of the provided constants.

If the value of one of those constants were changed, and your program rerun, your functions

should work with those new values.

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

8/10

For example, if AGE were changed, then your functions should work according to the new index at

which a customer  s age is stored in their string representation. Using constants in your code

means that this happens automatically.

Your docstring examples should reflect the given values of the constants in the provided starter

code, and do not need to change.

No Input or Output

Your store.py file should contain the starter code, plus the function definitions specified

above. store.py must not include any calls to the print and input functions. Do not add

any import statements. Also, do not include any function calls or other code outside of the function

definitions.

A1 Checker

We are providing a checker module (a1_checker.py) that tests two things:

whether your code follows the Python style guidelines

(https://www.utsc.utoronto.ca/~atafliovich/csca08/assignments/a1/python_style_guide.html) , and

whether your functions are named correctly, have the correct number of parameters, and

return the correct types.

To run the checker, open a1_checker.py and run it. Note: the checker file should be in

the same directory as your store.py, as provided in the starter code zip file. Be sure to scroll up to

the top and read all the messages!

If the checker passes for both style and types:

Your code follows the style guidelines.

Your function names, number of parameters, and return types match the assignment

specification. This does not mean that your code works correctly in all situations. We will

run a different set of tests on your code once you hand it in, so be sure to thoroughly test your

code yourself before submitting.

If the checker fails, carefully read the message provided:

It may have failed because your code did not follow the style guidelines. Review the error

description(s) and fix the code style. Please see the PyTA documentation

(https://www.cs.toronto.edu/~david/pyta/) for more information about errors.

It may have failed because:

you are missing one or more functions,

one or more of your functions are misnamed,

one or more of your functions have incorrect number or types of parameters, or

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

9/10

one of more of your functions return values of types that do not match the assignment

specification.

Read the error messages to identify the problematic functions, review the function specifications

in the handout, and fix your code.

Make sure the checker passes before submitting.

Marking

These are the aspects of your work that may be marked for A1:

Coding style (20%):

Make sure that you follow Python style guidelines

(https://www.utsc.utoronto.ca/~atafliovich/csca08/assignments/a1/python_style_guide.html)

that we have introduced and the Python coding conventions that we have been using

throughout the semester. Although we do not provide an exhaustive list of style rules, the

checker tests for style are complete, so if your code passes the checker, then it will earn

full marks for coding style with one exception: docstrings will be evaluated separately. For

each occurrence of a PyTA error, one mark (out of 20) deduction will be applied. For

example, if a C0301 (line-too-long) error occurs 3 times, then 3 marks will be deducted.

All functions, including helper functions, should have complete docstrings including

preconditions when you think they are necessary and at least two valid examples.

Correctness (80%):

Your functions should perform as specified. Correctness, as measured by our tests, will count for

the largest single portion of your marks. Once your assignment is submitted, we will run additional

tests not provided in the checker. Passing the checker does not mean that your code will earn full

marks for correctness.

Note that for full marks all docstring examples you provide should run without producing

errors.

What to hand in

The very last thing you do before submitting should be to run the checker program one

last time.

Otherwise, you could make a small error in your final changes before submitting that causes your

code to receive zero for correctness.

Submit store.py on MarkUs (this will become available soon!). Remember that spelling of

filenames, including case, counts: your file must be named exactly as above.

Assignment 1: CSCA08H3 Y LEC01 20245:Introduction to Computer Science I

10/10


版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:821613408 微信:horysk8 电子信箱:[email protected]
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:horysk8