Using argparse to interface with a grocery cart
Level: Advanced (score: 4)
Below is a Groceries class with add/delete/show/search methods.
You as a Python Developer are asked to give your users a command line interface so they can use the program. In real life we would have a persistent DB behind it, but let's focus on practicing argparse.
If new to argparse you might want to check out these Bites first:
- Add a command line interface to our bmi calculator
- Create a simple calculator that receives command line arguments
The program should work as shown here:
$ python groceries.py -h
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
optional arguments:
-h, --help show this help message and exit
-a ADD ADD ADD, --add ADD ADD ADD
add item providing name (str), price (int), and
craving (bool)
-d DELETE, --delete DELETE
delete a product by name (str)
-l, --list show items in cart
-s SEARCH, --search SEARCH
search items by name
$ python groceries.py -l
celery | 1
apples | 4
water | 2
coffee | 5
chicken | 6
pizza (craving) | 4
------------------------------------
Total | 22
$ python groceries.py -s coffee
coffee | 5
------------------------------------
Total | 5
$ python groceries.py -a honey 5 False
celery | 1
apples | 4
water | 2
coffee | 5
chicken | 6
pizza (craving) | 4
honey | 5
------------------------------------
Total | 27
$ python groceries.py -a chocolate 3 True
celery | 1
apples | 4
water | 2
coffee | 5
chicken | 6
pizza (craving) | 4
chocolate (craving) | 3
------------------------------------
Total | 25
$ python groceries.py -d chicken
celery | 1
apples | 4
water | 2
coffee | 5
pizza (craving) | 4
------------------------------------
Total | 16
$ python groceries.py -d water
celery | 1
apples | 4
coffee | 5
chicken | 6
pizza (craving) | 4
------------------------------------
Total | 20
$ python groceries.py -d none
Traceback (most recent call last):
File "groceries.py", line 101, in
cart.delete(product)
File "groceries.py", line 53, in delete
raise IndexError(f'{product} not in cart')
IndexError: none not in cart
$ python groceries.py -a bread
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -a/--add: expected 3 arguments
$ python groceries.py -ad
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -a/--add: expected 3 arguments
$ python groceries.py -dl
Traceback (most recent call last):
File "groceries.py", line 101, in
cart.delete(product)
File "groceries.py", line 53, in delete
raise IndexError(f'{product} not in cart')
IndexError: l not in cart
$ python groceries.py -l -s
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -s/--search: expected 1 argument
$ python groceries.py -s -d
usage: groceries.py [-h] [-a ADD ADD ADD | -d DELETE | -l | -s SEARCH]
groceries.py: error: argument -s/--search: expected 1 argument
Good luck and keep calm and code in Python!