Trilhas
/
Python
Python
/
Exercícios
/
Gestão de estoque
Gestão de estoque

Gestão de estoque

Exercício de aprendizagem

Introdução

Um dicionário (dict) em Python é uma estrutura de dados que associa chaves hashable a valores e é conhecido em outras linguagens de programação como uma tabela hash redimensionável, hashmap ou array associativo. Os dicionários são o único tipo de mapeamento embutido do Python.

Keys devem ser hashable e únicas em todo o dicionário. Os tipos de chave podem incluir numbers, str ou tuples (de valores imutáveis). Eles não podem conter estruturas de dados mutáveis, como lists, dicts ou sets. A partir do Python 3.7, a ordem das chaves de um dict é garantida como a ordem em que as entradas são inseridas.

values podem ser de qualquer tipo ou estrutura de dados. Os valores também podem se aninhar arbitrariamente, então podem incluir listas de listas, subdicionários e outras estruturas de dados personalizadas ou compostas.

Dada uma key, os dicionários conseguem recuperar um value em tempo constante (em média) (independente do número de entradas). Comparado a procurar um valor dentro de uma list ou array (sem saber a posição do index), um dict usa bem mais memória, mas tem recuperação muito rápida. Os dicionários são especialmente úteis em cenários em que a coleção de itens é grande e precisa ser acessada e atualizada com frequência.

Construção de dicionários

Dicionários podem ser criados de várias formas. As duas mais diretas são usar o construtor dict() ou declarar um literal de dict.

O construtor da classe dict()

O dict() (o construtor da classe de dicionário) pode ser usado com qualquer iterável de pares key, value ou com uma série de argumentos <name>=<value>:

#Passing a list of key,value tuples.
>>> wombat = dict([('name', 'Wombat'),('speed', 23),('land_animal', True)])
{'name': 'Wombat', 'speed': 23, 'land_animal': True}


#Using key=value arguments.
>>> bear = dict(name="Black Bear", speed=40, land_animal=True)
{'name': 'Black Bear', 'speed': 40, 'land_animal': True}

Literais de dicionário

Um dict também pode ser escrito diretamente como um literal de dicionário, usando chaves ({}) em volta de pares key : value:

>>> whale = {"name": "Blue Whale", "speed": 35, "land_animal": False}
{'name': 'Blue Whale', 'speed': 35, 'land_animal': False}

Acessando valores em um dicionário

Você pode acessar uma entrada de um dicionário usando uma chave entre colchetes ([]). Se uma key não existir no dict, um KeyError é lançado:

>>> bear["speed"]
40

>>> bear["color"]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'color'

Acessar uma entrada pelo método .get(<key>, <default value>) pode evitar o KeyError:

>>> bear.get("color", 'not found')
'not found'

Alterando ou adicionando valores a um dicionário

Você pode alterar o value de uma entrada atribuindo à sua chave:

#Assigning the value "Grizzly Bear" to the name key.
>>> bear["name"] = "Grizzly Bear"
{'name': 'Grizzly Bear', 'speed': 40, 'land_animal': True}

>>> whale["speed"] = 25
{'name': 'Blue Whale', 'speed': 25, 'land_animal': False}

Novos pares key:value podem ser adicionados da mesma forma:

# Adding a new "color" key with a new "tawney" value.
>>> bear["color"] = 'tawney'
{'name': 'Grizzly Bear', 'speed': 40, 'land_animal': True, 'color': 'tawney'}

>>> whale["blowholes"] = 1
{'name': 'Blue Whale', 'speed': 25, 'land_animal': False, 'blowholes': 1}

Removendo (com pop) entradas de um dicionário

Você pode usar o método .pop(<key>) para excluir uma entrada de um dicionário. O .pop() remove o par (key, value) e retorna o value para uso. Assim como o .get(), o .pop(<key>) aceita um segundo argumento (dict.pop(<key>, <default value>)) que será retornado se a key não for encontrada. Isso evita que um KeyError seja lançado:

#Using .pop() removes both the key and value, returning the value.
>>> bear.pop("name")
'Grizzly Bear'


#The "name" key is now removed from the dictionary.
#Attempting .pop() a second time will throw a KeyError.
>>> bear.pop("name")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'name'


#Using a default argument with .pop() will prevent a KeyError from a missing key.
>>> bear.pop("name", "Unknown")
'Unknown'

Percorrendo/iterando sobre um dicionário

Percorrer um dicionário com for item in dict ou while item itera por padrão apenas sobre as chaves. Você pode acessar os valores dentro do mesmo laço usando colchetes:

>>> for key in bear:
>>>     print((key, bear[key])) #this forms a tuple of (key, value) and prints it.
('name', 'Black Bear')
('speed', 40)
('land_animal', True)

Você também pode usar o método .items(), que retorna tuplas (key, value) automaticamente:

#dict.items() forms (key, value tuples) that can be unpacked and iterated over.
>>> for key, value in whale.items():
>>>     print(key, ":", value)
name : Blue Whale
speed : 25
land_animal : False
blowholes : 1

Da mesma forma, o método .keys() retorna keys e o método .values() retorna os values.

Instruções

Neste exercício, você vai gerenciar um sistema de inventário.

O inventário deve ser organizado pelo nome do item e deve manter o controle da quantidade de itens disponíveis.

Você vai precisar lidar com a adição de itens a um inventário. Cada vez que um item aparecer em uma determinada lista, a quantidade desse item no inventário deve aumentar em 1. Você também vai precisar lidar com a remoção de itens de um inventário, diminuindo as quantidades em 1 quando solicitado.

Por fim, você vai precisar implementar uma função que retorne todos os pares chave-valor de um determinado inventário como uma list de tuples.

1. Crie um inventário a partir de uma lista

Implemente a função create_inventory(<input list>), que cria um "inventário" a partir de uma lista de itens de entrada. Ela deve retornar um dict contendo cada nome de item junto com sua respectiva quantidade.

>>> create_inventory(["coal", "wood", "wood", "diamond", "diamond", "diamond"])
{"coal":1, "wood":2, "diamond":3}

2. Adicione itens de uma lista a um dicionário existente

Implemente a função add_items(<inventory dict>, <item list>), que adiciona uma lista de itens ao inventário passado:

>>> add_items({"coal":1}, ["wood", "iron", "coal", "wood"])
{"coal":2, "wood":2, "iron":1}

3. Decremente itens do inventário

Implemente a função decrement_items(<inventory dict>, <items list>), que recebe uma list de itens. Sua função deve remover 1 da contagem de um item para cada vez que esse item aparecer na list:

>>> decrement_items({"coal":3, "diamond":1, "iron":5}, ["diamond", "coal", "iron", "iron"])
{"coal":2, "diamond":0, "iron":3}

As contagens de itens no inventário não podem ficar abaixo de 0. Se o número de vezes que um item aparece na list de entrada exceder a contagem disponível, a quantidade registrada para esse item deve permanecer em 0. As solicitações adicionais para remover contagens devem ser ignoradas depois que a contagem chegar a zero.

>>> decrement_items({"coal":2, "wood":1, "diamond":2}, ["coal", "coal", "wood", "wood", "diamond"])
{"coal":0, "wood":0, "diamond":1}

4. Remova uma entrada por completo do inventário

Implemente a função remove_item(<inventory dict>, <item>), que remove um item e sua contagem por completo de um inventário:

>>> remove_item({"coal":2, "wood":1, "diamond":2}, "coal")
{"wood":1, "diamond":2}

Se o item não for encontrado no inventário, a função deve retornar o inventário original sem alterações.

>>> remove_item({"coal":2, "wood":1, "diamond":2}, "gold")
{"coal":2, "wood":1, "diamond":2}

5. Retorne todo o conteúdo do inventário

Implemente a função list_inventory(<inventory dict>), que recebe um inventário e retorna uma lista de tuples no formato (item, quantity). A lista deve incluir apenas os itens disponíveis (com quantidade maior que zero):

>>> list_inventory({"coal":7, "wood":11, "diamond":2, "iron":7, "silver":0})
[('coal', 7), ('diamond', 2), ('iron', 7), ('wood', 11)]
Editar via GitHub O link abre em uma nova janela ou aba
Python Exercism

Tudo pronto para começar Gestão de estoque?

Crie sua conta no Exercism para aprender e dominar Python com 17 conceitos146 exercícios e mentoria humana de verdade, tudo de graça.