Muito bem, João!
Parabéns, a lógica está muito boa!
Algumas sugestões:
Se atente aos padrões de estilo. Aspas simples e aspas duplas não deveriam ser usadas no mesmo código. Ou todos devem ser aspas simples, ou todos aspas duplas.
A sua lógica contém um leve bug nessa linha:
stock.update({f'{product_att}': f'{new_qnt}'})
Dessa forma, a nova quantidade, que é um inteiro, assim como os outros elementos do estoque, está sendo enviada como uma string para o estoque, então ele receberia '50' ao invés de 50, por exemplo.
Uma forma de corrigir, seria passar as informações diretamente:
stock.update({product_att: new_qnt})
Ou então, atualizando o atributo diretamente:
stock[product_att] = new_qnt
Por fim, apenas por curiosidade, essa é mais uma maneira de realizar um update de um dicionário:
stock = stock | {product_att: new_qnt}
Ou:
stock |= {product_att: new_qnt}
Última sugestão, muito importante também, com relação à nomenclatura de suas variáveis:
Não há problema nenhum em definir o nome das variáveis em inglês, mas é importante que os nomes sejam claros:
new_qnt
é descitivo o suficiente, mas, é sempre preferível, escrever new_quantity
, pois esses poucos dígitos a mais, deixam mais claro para alguém que está lendo, e não dão quase nenhum trabalho, ainda mais usando IDEs que têm autocomplete.
Agora, product_att
não é claro como new_qnt
foi.
Se refere a product_attribute
? product_attention
? product_attenuated
?
No caso, se refere a algo como product_to_update
ou product_updated
.
Sempre que possível, não custa nada escrever o nome completo do que aquela variável está se referindo. Deixa o código muito mais claro e fácil de ser lido, algo que é essencial ao trabalhar com outros desenvolvedores.