81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
"""Functions to keep track and alter inventory."""
|
|
|
|
|
|
def create_inventory(items):
|
|
"""Create a dict that tracks the amount (count) of each element on the `items` list.
|
|
|
|
:param items: list - list of items to create an inventory from.
|
|
:return: dict - the inventory dictionary.
|
|
"""
|
|
inventory: dict = {}
|
|
for item in items:
|
|
inventory[item] = items.count(item)
|
|
return inventory
|
|
|
|
|
|
def add_items(inventory, items):
|
|
"""Add or increment items in inventory using elements from the items `list`.
|
|
|
|
:param inventory: dict - dictionary of existing inventory.
|
|
:param items: list - list of items to update the inventory with.
|
|
:return: dict - the inventory updated with the new items.
|
|
"""
|
|
# inventory is empty, create new one and return inventory
|
|
if inventory == {}:
|
|
return create_inventory(items)
|
|
# increment items that already exists in inventory
|
|
for item in inventory:
|
|
inventory[item] += items.count(item)
|
|
# add new items that doesnt exist in inventory
|
|
# the new items can only be added after incrementing items that already
|
|
# exists in inventory to avoid adding the new items again
|
|
for item in items:
|
|
if item not in inventory:
|
|
inventory[item] = items.count(item)
|
|
return inventory
|
|
|
|
|
|
def decrement_items(inventory, items):
|
|
"""Decrement items in inventory using elements from the `items` list.
|
|
|
|
:param inventory: dict - inventory dictionary.
|
|
:param items: list - list of items to decrement from the inventory.
|
|
:return: dict - updated inventory with items decremented.
|
|
"""
|
|
for item in inventory:
|
|
if item in items:
|
|
inventory[item] -= items.count(item)
|
|
if inventory[item] < 0:
|
|
inventory[item] = 0
|
|
return inventory
|
|
|
|
|
|
def remove_item(inventory, item):
|
|
"""Remove item from inventory if it matches `item` string.
|
|
|
|
:param inventory: dict - inventory dictionary.
|
|
:param item: str - item to remove from the inventory.
|
|
:return: dict - updated inventory with item removed. Current inventory if item does not match.
|
|
"""
|
|
if item in inventory:
|
|
inventory.pop(item)
|
|
return inventory
|
|
|
|
|
|
def list_inventory(inventory):
|
|
"""Create a list containing only available (item_name, item_count > 0) pairs in inventory.
|
|
|
|
:param inventory: dict - an inventory dictionary.
|
|
:return: list of tuples - list of key, value pairs from the inventory dictionary.
|
|
"""
|
|
inventory_list: list[tuple] = []
|
|
# conventional
|
|
# for item in inventory:
|
|
# if inventory[item] > 0:
|
|
# inventory_list.append((item, inventory[item]))
|
|
# using list comprehension
|
|
inventory_list = [
|
|
(item, inventory[item]) for item in inventory if inventory[item] > 0
|
|
]
|
|
return inventory_list
|