Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Exercício 11 - Resposta de aluno vs resposta do instrutor

Olá. Na questão 11, tive enorme dificuldade de entender como fazer o código. Principalmente na parte destacada a seguir:

# Percorremos os valores de chaves e elementos do dicionário
for produto in dados_vendas.keys():
  # Somamos o total de vendas 
  total_vendas += dados_vendas[produto]
  # Verificamos se valor de venda atual desing (dados_vendas[produto]) é maior que o valor armazenado em unidades_produto_mais_vendido
  # Cada vez que dados_vendas[produto] superar o valor em unidades_produto_mais_vendido, 
  # a variável unidades_produto_mais_vendido vai ser igual à dados_vendas[produto], atribuindo um novo valor
  # De forma similar, produto_mais_vendido também é substituído pelo produto atual
  if dados_vendas[produto] > unidades_produto_mais_vendido:
    unidades_produto_mais_vendido = dados_vendas[produto]
    produto_mais_vendido = produto

Algumas duvidas surgiram, como:

  1. Quando se coloca dados_vendas[produto], vira uma lista por conta dos colchetes?
  2. Como que ali no final, a lógica do Python leva a ler produto a produto e entender qual que é o maior? Poderia dissecar a lógica por trás desse código?

Finalmente, quando procurei por ajuda, vi que um aluno usou a sintaxe max e me pareceu muito mais fácil. Ficando minha resposta ao exercício assim:

vendas_produto = {'Produto A': 300, 'Produto B': 80, 'Produto C': 60,
 'Produto D': 200, 'Produto E': 250, 'Produto F': 30}

total_vendas = sum(vendas_produto.values())
maior_valor = max(vendas_produto, key=vendas_produto.get)
print(f'Total de vendas: {total_vendas}')
print(f'Maior produto vendido: {maior_valor}')

Minha preocupação é quão a prova de revisão meu código se encontra para adereçar a demanda do exercício, a fim de encontrar melhorias.

1 resposta
solução!

Oi, Eduardo! Tudo bem com você?

Respondendo suas perguntas:

1 Quando se coloca dados_vendas[produto], vira uma lista por conta dos colchetes?

Para contextualizar a questão, vamos lembrar que a variável dados_vendas é um dicionário que possui chaves e valores. No nosso caso, as chaves são os nomes dos produtos e os valores são as quantidades vendidas de cada produto. Por exemplo:

  • Chave: 'Produto A'
  • Valor: 300

Lembrados disso, podemos usar um laço for para percorrer cada chave no dicionário usando o método keys() e atribuir essa chave a uma variável chamada produto:

for produto in dados_vendas.keys():

Ou seja, não vira uma lista. Na verdade, a cada repetição dentro do laço for, eu tenho produto sendo uma string: 'Produto A', 'Produto B', 'Produto C', 'Produto D', 'Produto E' e 'Produto F'.

Assim a gente pode concluir que na primeira execução do laço for, acessar a variável usando dados_vendas[produto] é o mesmo que acessar usando dados_vendas['Produto A'] e irá retornar o valor correspondente àquela chave (300).

2 Como que ali no final, a lógica do Python leva a ler produto a produto e entender qual que é o maior? Poderia dissecar a lógica por trás desse código?

Boa pergunta, Eduardo! O trecho à qual você se refere é esse:

if dados_vendas[produto] > unidades_produto_mais_vendido:
    unidades_produto_mais_vendido = dados_vendas[produto]
    produto_mais_vendido = produto

Primeiro precisamos lembrar que a variável unidades_produto_mais_vendido possui o valor 0. Então, na primeira comparação if dados_vendas[produto] > unidades_produto_mais_vendido, entraremos no laço condicional. Porque 300 é maior do que 0.

Em seguida, o valor 300 é atribuído à variável unidades_produto_mais_vendido no trecho unidades_produto_mais_vendido = dados_vendas[produto].

Mas não queremos armazenar a quantidade do valor somente, também queremos armazenar o nome daquele produto. Por essa razão usamos a linha produto_mais_vendido = produto.

Por fim, sobre a resolução usando max(), te respondi sobre isso neste outro tópico que você postou e expliquei toda lógica por trás de max(vendas_produto, key=vendas_produto.get). Se ainda ficarem dúvidas, continuamos por lá.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado