Modulo 011 – Tuplas - Uma "lista" muito útil e imutável –

– Tuplas - Uma "lista" muito útil e imutável – Tuplas

A estrutura das Tuplas são bem parecidas com listas. A grande diferença entra as duas é que as Tuplas são imutáveis. Outra diferença está na estrutura, enquanto as listas usam [] as tuplas usam (). É bem mais comum usarmos tuplas quando temos dados heterogêneos. Nas listas, usávamos listas apenas numéricas, ou apenas não numéricas. Nas tuplas vai ser comum vermos dados numéricos e não numéricos juntos.

 vendas = ('Lira', '25/08/2020', '15/02/1994', 2000, 'Estagiário'
 print(vendas) 
                     
 nome = vendas[0
 data_contratacao = vendas[1
 data_nascimento = vendas[2
 salario = vendas[3
 cargo = vendas[4
_____________________________
 ('Lira', '25/08/2020', '15/02/1994', 2000, 'Estagiário') 

Como falamos anteriormente, as tuplas são imutáveis. Ao tentarmos mudar o nome ‘Lira’ para ‘João’ na tupla. Conforme indicado temos um erro que indica que uma tupla não pode ter seus valores alterados.

– Unpacking em Tuplas

No exemplo anterior fizemos a atribuição das variáveis através da sua posição. Assim como fazíamos com as listas. Uma forma mais simples e usual de se fazer esta atribuição é através do unpacking. O que isso significa? Em uma única linha de código iremos atribuir os valores das tuplas para cada uma das variáveis. Assim como demonstramos no exemplo ao lado. Perceba que a ordem da atribuição corresponde a sequência da tupla.

 vendas = ('Lira''25/08/2020''15/02/1994'2000'Estagiário') 
 nome, data_contratacao, data_nascimento, salario, cargo = vendas 
 print(nome) 
 print(data_contratacao) 
 print(data_nascimento) 
 print(salario) 
 print(cargo) 
____________________
 Lira 
 25/08/2020 
 15/02/1994 
 2000 
 Estagiário 

Vamos ver o que acontece quando esquecemos alguma das variáveis e tentamos fazer o unpacking da tupla vendas. No nosso exemplo, estamos atribuindo uma tupla com 5 itens a 4 variáveis. Esse descasamento gera um erro no Python. Nesse caso, como o número de itens da tupla é MAIOR que o número de variáveis, temos o erro que são muitos valores para unpack. Se estivéssemos em uma situação onde o número de variáveis é maior que o número de itens da tupla, seria informado que não há itens o suficiente para unpack.

 vendas = ('Lira''25/08/2020''15/02/1994'2000'Estagiário') 
 nome, data_contratacao, data_nascimento, cargo = vendas 
_______________________________
 ValueError: too many values to unpack (expected 4) 

Você se lembra do ENUMERATE()? Se lembra que tínhamos como resultados os itens entre PARÊNTESES? Pois é, eram TUPLAS que agora estamos aprendendo como usar.

 vendas = [1000, 2000, 300, 300, 150
 funcionarios = ['João', 'Lira', 'Ana', 'Maria', 'Paula'
           
 for item in enumerate(vendas): 
        print(item) 
_______________________
 (0, 1000) 
 (1, 2000) 
 (2, 300) 
 (3, 300) 
 (4, 150) 

Bem, se sabemos que item é uma TUPLA podemos fazer o unpacking desta tupla da mesma forma que fizemos anteriormente conforme indicado na figura. Agora, ao invés de uma tupla, “printamos” apenas os valores “separados”

 vendas = [10002000300300150
 funcionarios = ['João''Lira''Ana''Maria''Paula'
           
 for item in enumerate(vendas): 
        i,vendas = item
        print(i) 
        print(vendas) 
_______________________
 0 
 1000 
 1 
 2000 
 2 
 300 
 3 
 300 
 4 
 150 

Mas não parece ser muito eficiente criarmos uma variável item que será atribuída à variável i e à variável vendas. Vamos melhorar esse código...
Veja o exemplo:

 vendas = [1000, 2000, 300, 300, 150
 funcionarios = ['João', 'Lira', 'Ana', 'Maria', 'Paula'
                   
 for i, venda in enumerate(vendas): 
         print('O funcionário {} vendeu {}.'.format(funcionarios[i], venda)) 
____________________________
 O funcionário João vendeu 1000. 
 O funcionário Lira vendeu 2000. 
 O funcionário Ana vendeu 300. 
 O funcionário Maria vendeu 300. 
 O funcionário Paula vendeu 150. 

Substituímos a variável ITEM diretamente pelo unpacking. Aproveitamos também para melhorar nossa saída usando .FORMAT ao invés de apenas o print com valores avulsos.
Perceba como em apenas 2 linhas de código conseguimos uma informação bem fácil de ser compreendida. O unpacking tem exatamente essa função, de forma simples coletar informações de TUPLAS e LISTAS com o auxílio do FOR.

 A T E N Ç Ã O ! 
A estrutura do unpacking é comumente esta utilizada no nosso exemplo.
• venda in vendas
• produto in produtos
• funcionario in funcionarios

Vamos agora para um desafio. Imagine que você está no seu trabalho e receba esta informação ao lado com a venda de vários produtos em datas distintas. Seu chefe, te pergunta:
1) qual foi o faturamento do iphone no dia 20/08/2020?
2) Qual o produto mais vendido (em unidades) no dia 21/08/2020?

 vendas = [
     ('20/08/2020', 'iphone x', 'azul', '128gb', 350, 4000), 
     ('20/08/2020', 'iphone x', 'prata', '128gb', 1500, 4000), 
     ('20/08/2020', 'ipad', 'prata', '256gb', 127, 6000), 
     ('20/08/2020', 'ipad', 'prata', '128gb', 981, 5000), 
     ('21/08/2020', 'iphone x', 'azul', '128gb', 397, 4000), 
     ('21/08/2020', 'iphone x', 'prata', '128gb', 1017, 4000), 
     ('21/08/2020', 'ipad', 'prata', '256gb', 50, 6000), 
     ('21/08/2020', 'ipad', 'prata', '128gb', 4000, 5000

Antes do desespero, temos sempre que analisar a situação... Como já vimos, [] simbolizam listas e () tuplas. Logo, o que temos aqui é uma lista com 8 tuplas... Dessa forma, é um pouco complicado de trabalharmos com a informação, portanto, vamos fazer o Unpacking destas tuplas de forma que as informações fiquem mais simples de serem trabalhadas.
Para fazer o unpacking precisamos de 2 coisas:
1) Identificar número de itens por tupla e seus significados;
2) Criar um for para o unpacking

Analisando os dados fornecidos da lista VENDAS podemos criar as variáveis apresentadas ao lado para cada um dos itens da tupla. Elas serão usadas dentro do FOR para a realização do unpacking. Perceba que após a execução do FOR teremos todos os itens alocados nas variáveis que acabamos de criar.
 
 for item in vendas: 
     data, produto, cor, capacidade, unidades, valor_unitario = item 

Agora já fizemos a estrutura para o unpacking. Vamos relembrar as perguntas do seu chefe...
1) Qual foi o faturamento do iphone no dia 20/08/2020?
Para respondermos a pergunta 1 vamos precisar usar conhecimentos já conhecidos como o IF. Aqui podemos criar uma condição que caso seja atendida calcula o faturamento.

 faturamento = 0 
 for item in vendas: 
     data, produto, cor, capacidade, unidades, valor_unitario = item  
     if produto == 'iphone x' and data == '20/08/2020'
         faturamento += unidades * valor_unitario 
         
 print('O faturamento de IPhone no dia 20/08/2020 foi de {}'.format(faturamento)) 
_________________________________
 O faturamento de IPhone no dia 20/08/2020 foi de 7400000 

2) Qual o produto mais vendido (em unidades) no dia 21/08/2020?
Para respondermos a pergunta 2 vamos usar a mesma estrutura do unpacking. Usando o mesmo conceito do IF, vamos criar a condição para o dia 21/08/2020.
Além disso, vamos precisar de duas variáveis auxiliares (produto_mais_vendido e qtde_produto_mais_vendido) para podermos armazenar o valor do produto mais vendido.

 faturamento = 0 
 qtde_produto_mais_vendido = 0 
 for item in vendas: 
     data, produto, cor, capacidade, unidades, valor_unitario = item 
     if data == '21/08/2020'
         if unidades > qtde_produto_mais_vendido: 
             produto_mais_vendido = produto 
             qtde_produto_mais_vendido = unidades 
                   
 print('Meu produto mais vendido no dia 21/08/2020 foi o {} com {} unidades'.format(produto_mais_vendido, qtde_produto_mais_vendido)) 
________________________________
 Meu produto mais vendido no dia 21/08/2020 foi o ipad com 4000 unidades 

Nenhum comentário:

Postar um comentário