Baixe o app para aproveitar ainda mais
Prévia do material em texto
06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 1/19 Programação RAD Aula 7: Tuplas e dicionários INTRODUÇÃO Como vimos nas aulas anteriores, o paradigma da orientação a objetos é muito usado em diversas linguagens. Em Python, não é diferente. Tudo o que estudamos até agora é uma derivação dos conceitos de classes e de objetos. Aqui, vamos dar continuidade a esse estudo, retomando as aulas de listas e estruturas de dados, a �m de aprender a usar as tuplas e os dicionários, que são aplicados em várias situações do dia a dia. Se você �zer uma busca na internet, encontrará vários temas relacionados à linguagem Python, tais como desenvolvimento para desktop e web. Por exemplo, o Django é um framework muito usado para web e �ask. LEMBRE-SE: muitas aplicações com Python são feitas em linha de comando ou em aplicações para console. Nosso objeto de estudo serve para essas aplicações. Então, aproveite! 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 2/19 OBJETIVOS Criar programas em Python com tuplas e dicionários. Manipular esses programas. 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 3/19 Tuplas As tuplas nada mais são do que listas. Já aprendemos que é possível realizar vários comandos a partir das listas, tais como inserir e remover dados a todo momento, embaralhar e classi�car elementos etc. No caso das tuplas, há um detalhe importante: elas são imutáveis. E existem aplicações para isso. Para entender melhor a questão, é necessário explicar como as tuplas funcionam. Neste exemplo, vamos criar tuplas e acessar seus elementos: >>> minha_tupla = ('t','u','p','l','a') >>> minha_tupla ('t', 'u', 'p', 'l', 'a') Aqui, há uma diferença com relação às listas: enquanto estas são rodeadas por colchetes “[“ e “]”, as tuplas são rodeadas por parênteses “(“ e “)”. Agora, vamos mudar o primeiro elemento de “t” para “s”: >>> minha_tupla[0]='s' Traceback (most recent call last): File "< pyshell#151 >", line 1, in < module > minha_tupla[0]='s' TypeError: 'tuple' object does not support item assignment Você percebeu como a tupla é imutável? Não podemos alterar seus elementos, mas é possível acessá-los, assim como �zemos com as listas. Observe: >>> minha_tupla[0] 't' >>> minha_tupla[4] 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 4/19 'a' >>> minha_tupla[10] Traceback (most recent call last): ← Epa! Assim como as listas, temos que respeitar os índices File "", line 1, in ← Não existe elemento na posição 10 minha_tupla[10] IndexError: tuple index out of range Existe uma forma de acessar os elementos de uma lista que também serve para as tuplas, chamada de slice. Veja como funciona: >>> minha_tupla ('t', 'u', 'p', 'l', 'a') >>> minha_tupla[1:3] ('u', 'p') O slice nos permite fatiar uma tupla (ou lista) e retornar seus elementos por meio de outra tupla (ou lista), mas sem retirá-los de lá. A fatia é representada pelos colchetes, que se referem aos índices da tupla. Índices não existentes geram a exceção costumeira de “out of range”. Há outras formas de slice, como mostra o código a seguir: >>> minha_tupla ('t', 'u', 'p', 'l', 'a') >>> minha_tupla[2:] ← pega os elementos a partir da posição 2 ('p', 'l', 'a') >>> minha_tupla[:3] ← pega os n primeiros elementos, neste caso os 3 prim. 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 5/19 ('t', 'u', 'p') >>> minha_tupla[:] ← pega a tupla toda ('t', 'u', 'p', 'l', 'a') Saiba Mais , Também existem outras maneiras de fatiar uma tupla (ou lista), mas as que apresentamos já são su�cientes para o objetivo desta aula. EXERCÍCIO Analise o código a seguir: my_tuple = (1, 2, 3, 4) my_tuple.append( (5, 6, 7) ) print(len(my_tuple)) O que será impresso nele? a) 1 b) 2 c) 5 d) 7 e) Erro! Ocorrerá uma exceção. Justi�cativa Aplicação de métodos nas tuplas Algumas ações realizadas nas listas também podem ser feitas nas tuplas a partir dos mesmos métodos. São elas: 1. Veri�car quantos elementos existem na tupla Para isto, usamos o método len(): >>> len(minha_tupla) 5 >>> len(("Olá","mundo","do","Python")) 4 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 6/19 2. Concatenar tuplas Para isto, usamos o operador “+”: >>> parte1=("Ouviram","do","Ipiranga") >>> parte2=("as","margens","plácidas") >>> verso1 = parte1+parte2 >>> verso1 ('Ouviram', 'do', 'Ipiranga', 'as', 'margens', 'plácidas') 3. Repetir elementos Para isto, usamos o operador “*”: >>> mi=('mi',) ← Note o detalhe da vírgula! >>> mi*10 ('mi', 'mi', 'mi', 'mi', 'mi', 'mi', 'mi', 'mi', 'mi', 'mi') Quando de�nimos uma tupla com um único elemento, devemos inserir a vírgula, como �zemos aqui. Se apenas criarmos uma tupla com um único elemento – como, por exemplo, mi2 = (‘mi’) –, a linguagem Python entenderá que se trata de uma string entre parênteses. Neste código, repetimos o elemento da tupla 10 vezes, mas sem modi�car a original. 4. Veri�car se um elemento pertence à tupla O que vale para as listas ocorre com as tuplas: >>> minha_tupla ('t', 'u', 'p', 'l', 'a') >>> 'u' in minha_tupla 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 7/19 True >>> 'f' in minha_tupla False 5. Iterar nos elementos Agora, vamos aplicar nas tuplas um conceito que estudamos na aula 3: a iteração a partir do comando for. Sabemos que esse comando é usado em muitas linguagens de programação para repetir determinado trecho de código. Mas ele também pode ser utilizado para iterar sobre listas, arrays e tuplas. Quando isso ocorre, o comando for também é conhecido como foreach. Veja o exemplo: >>> minha_tupla ('t', 'u', 'p', 'l', 'a') >>> for i in minha_tupla: print(i) t u p l a Como você percebeu, a sintaxe é muito parecida com o comando for aplicado nas listas, mas, agora, o elemento de repetição é uma tupla. A linguagem já entende o número de repetições que serão efetuadas. Enquanto houver elemento na estrutura, o código de�nido será repetido. No exemplo, realizamos uma operação muito simples: apenas escrevemos o elemento da posição atual da repetição. Em aplicações maiores, blocos de repetição muito mais complexos poderiam ser feitos. 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 8/19 EXERCÍCIO Analise o código a seguir: seila = {} seila[1] = 1 seila['1'] = 2 seila[1] += 1 soma = 0 for k in seila: soma += seila [k] print(soma) O que será impresso nele? a) 1 b) 2 c) 3 d) 4 e) 5 Justi�cativa DICIONÁRIOS Em Python, dicionário é um tipo de estrutura de dados em que há mapeamento entre uma chave (key) e um valor (value). Em outros lugares, até mesmo diferentes dessa linguagem, aplicamos o conceito par-valor, relacionado, principalmente, a bancos de dados que não usam o modelo relacional. Um dicionário pode ser representado da seguinte forma: 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A36… 9/19 Suas chaves funcionam como um índice para os valores, que podem ser constituídos de qualquer tipo de conteúdo – inclusive dicionário. Imagine o que podemosfazer com essa estrutura! Para entender melhor o assunto, vamos analisar um exemplo: uma lista de contatos. Trata-se de uma lista de nomes, geralmente em ordem alfabética, cada qual com alguns campos, tais como: Para facilitar a compreensão, suponha que essa lista guarde apenas números de telefones com nomes como “Felix”, “Brito”, “Piazza”, “Carlos Alberto”, “Clodoaldo” – cada um com um ou mais números. A lista em questão pode ser representada assim: Antes de começar a desenvolver o código, é importante que o programador pense na arquitetura das estruturas de dados. Em uma lista de telefones, é evidente por onde vamos acessar os dados (as chaves) e qual é o conteúdo (telefones). Entretanto, em situações mais complexas, recomendamos planejar, adequadamente, o que será desenvolvido. Como já �zemos isso anteriormente, vamos ao código, seguindo estes passos: 1. Criar o dicionário 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 10/19 Vamos chamá-lo de “contatos”: >>> contatos={} >>> contatos {} Criamos as listas com colchetes “[“ e “]” e as tuplas com parênteses “(“ e “)”. Os dicionários são criados com chaves “{“ e “}”. 2. Inserir dados no dicionário Agora, vamos começar a popular nosso dicionário, inserindo um par chave-valor: >>> contatos["Felix"]=["1111- 2222"] → criando um par chave-valor >>> contatos {'Felix': ['1111- 2222']} → conteúdo do dicionário Também podemos fazer isso usando uma lista como valor: >>> tel_brito = ["2221-3321","3322-3333"] >>> contatos["Brito"]=tel_brito >>> contatos {'Felix': ['1111-2222'], 'Brito': ['2221- 3321', '3322-3333']} Aqui, criamos uma lista chamada tel_brito e atribuímos os valores a ela (dois telefones). Inserimos a lista na chave “Brito” e mostramos o dicionário em seguida. Vamos continuar inserindo para igualar à �gura inicial: 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 11/19 >>> contatos["Piazza"]=["4444-4441"] >>> contatos[“Carlos Alberto”] = [“4444- 5541”,”7777-4545”] >>> tel_clodoaldo = ["3333-9999","8888- 3333","8888-3434"] >>> contatos["Clodoaldo"]=tel_clodoaldo >>> contatos {'Felix': ['1111-2222'], 'Brito': ['2221- 3321', '3322-3333'], 'Piazza': ['4444-4441'], 'Carlos Alberto': ['4444- 5541', '7777-4545'], 'Clodoaldo': ['3333-9999', '8888-3333', '8888-3434']} Assim, nossa lista está completa, idêntica à �gura que usamos em nosso pequeno planejamento. Observe que cada par chave-valor tem um formato padrão, em que há a chave entre aspas, dois pontos (“:”) e, em seguida, seu valor (no caso, uma lista de telefones). 3. Acessar dados no dicionário Agora, vamos fazer algumas operações no dicionário, sempre pela chave: >>> contatos["Felix"] → modo mais simples de acesso ['1111-2222'] >>> tel_capitao = contatos["Carlos Alberto"] → criamos uma variável para receber >>> tel_capitao → o conteúdo de uma chave ['4444-5541', '7777-4545'] 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 12/19 4. Alterar o conteúdo de alguma chave no dicionário Agora, vamos fazer algumas operações no dicionário, sempre pela chave: >>> contatos["Felix"] ['1111-2222'] >>> contatos["Felix"] = ["9999-1010"] >>> contatos["Felix"] ['9999-1010'] 5. Ordenar o dicionário Para isto, não existe um método sort() como nas listas. A�nal, não faz muito sentido guardar os dados do dicionário de maneira ordenada. Para �carem armazenados ordenadamente, precisamos inseri-los dessa forma. Você pode fazer isso em um programa, mas não é necessário guardá-los na ordem. Por trás do dicionário, há o conceito de hash table: uma estrutura de dados muito poderosa, cuja ordem dos elementos não é essencial, e sim proposital. Uma alternativa é ordenar uma lista com as chaves e acessar os valores na ordem dessa lista. Vejamos alguns métodos para isso. MÉTODOS PARA ORDENAR DICIONÁRIOS Método keys() Permite identi�car as chaves de um dicionário: >>> contatos.keys() dict_keys(['Felix', 'Brito', 'Piazza', 'Carlos Alberto', 'Clodoaldo']) Método values() Permite visualizar os valores armazenados: 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 13/19 dict_values([['9999-1010'], ['2221-3321', '3322-3333'], ['4444-4441'], ['4444-5541', '7777-4545'], ['3333-9999', '8888-3333', '8888-3434']]) Tanto no método keys() quanto no values(), duas listas são retornadas, e podemos usá-las em nossos programas. Método get() Permite obter o conteúdo associado à chave. Se a chave não existir, o valor associado retornará. Mas, se o valor não for passado, as chamadas do get para chaves inexistentes retornarão um valor denominado None (“nada”). Veja um exemplo: >>> contatos {'Felix': ['9999-1010'], 'Brito': ['2221- 3321', '3322-3333'], 'Piazza': ['4444-4441'], 'Carlos Alberto': ['4444-5541', '7777-4545'], 'Clodoaldo': ['3333-9999', '8888-3333', '8888-3434']} >>> contatos.get('Brito') ['2221-3321', '3322-3333'] → mostrou os contatos da chave ‘Brito’ >>> contatos.get('Pele') None → não há valor armazenado para a chave ‘Pele’ >>> contatos.get('Rivelino') None >>> contatos.get('Piazza') ['4444-4441'] >>> 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 14/19 Método in Permite veri�car se uma chave pertence a um dicionário: >>> "Piazza" in contatos True → A chave “Piazza” existe no dicionário >>> "Pelé" in contatos False → A chave “Pelé” não existe no dicionário Método items() Permite retornar os elementos na forma de tuplas: >>> contatos.items() dict_items([('Felix', ['9999-1010']), ('Brito', ['2221-3321', '3322-3333']), ('Piazza', ['4444-4441']), ('Carlos Alberto', ['4444-5541', '7777- 4545']), ('Clodoaldo', ['3333-9999', '8888- 3333', '8888-3434'])]) | Método copy() Permite copiar um dicionário: >>> contatos {'Felix': ['9999-1010'], 'Brito': ['2221- 3321', '3322-3333'], 'Piazza': ['4444-4441'], 'Carlos Alberto': ['4444-5541', '7777-4545'], 'Clodoaldo': ['3333-9999', '8888-3333', '8888-3434']} 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 15/19 >>> jogadores = contatos.copy() >>> jogadores {'Felix': ['9999-1010'], 'Brito': ['2221- 3321', '3322-3333'], 'Piazza': ['4444-4441'], 'Carlos Alberto': ['4444-5541', '7777-4545'], 'Clodoaldo': ['3333-9999', '8888-3333', '8888-3434']} Agora, há um dicionário chamado de “jogadores” com o mesmo conteúdo de “contatos”. | Método clear() Permite apagar todos os elementos do dicionário: >>> contatos.clear() >>> contatos {} EXERCÍCIO Analise o código a seguir: init_tuple = () print (init_tuple.__len__()) O que será impresso nele? a) None b) 1 c) 0 d) -1 e) Erro! Ocorrerá uma exceção. Justi�cativa OUTRAS FORMAS DE CRIAR DICIONÁRIOS 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 16/19 Também podemos criar um dicionário de outras formas. Uma delas é pelo método dict(), que pode receber dois parâmetros: Listas de tuplas Cada uma contém uma chave e um valor. Sequência de itens No formato chave-valor. Veja como funciona na prática: >>> camisas = dict([(7,"Jairzinho"), (9,"Tostao"),(10,"Pele"),(11,"Rivelino")]) >>> camisas[7] 'Jairzinho' >>> camisas[10] 'Pele' Aqui, criamos quatro tuplas: (7,"Jairzinho"), (9,"Tostao"), (10,"Pele"), (11,"Rivelino").Cada uma contém um par chave-valor: Chave Número da camisa do jogador. Valor 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 17/19 Nome do jogador. Nesse caso, usamos tuplas, mas poderíamos ter feito o mesmo processo com listas. Usando o método fromkeys(lista,valor), é possível criar um dicionário, cujas chaves são os elementos de uma lista, e cujos valores são todos iguais a determinado valor. Se o valor não for especi�cado, o default é None. | Exemplo 1 >>> {}.fromkeys([16,4,2,3]) {16: None, 4: None, 2: None, 3: None} Aqui, criamos um dicionário com as chaves 16,4,2,3 pertencentes a uma lista. Não de�nimos nenhum valor a elas. Logo, seu conteúdo será None, conforme a especi�cação. | Exemplo 2 Agora, vamos melhorar o exemplo anterior: >>> {}.fromkeys([16,4,2,3],"defesa") {1: 'defesa', 4: 'defesa', 2: 'defesa', 3: 'defesa'} Aqui, criamos um dicionário com as chaves 1,4,2,3 com o valor “defesa”. Seria interessante atribuir esse dicionário a uma variável e usá-la em um programa ou script. Atenção , A linguagem Python possui formas diferentes de combinar esses recursos para criar programas mais poderosos. ATIVIDADES 1. Nosso DNA é composto de nucleotídeos que contêm as bases nitrogenadas, representados por quatro letras: A = adenina; C = citosina; 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 18/19 T = timina; G = guanina. Considere a sequência de DNA demonstrado por uma tupla: “AATCGGGTTAATGCAATTCG” DNA = (‘a’,’a’,’t’, ’c’, ’g’, ’g’, ’g’, ’t’, ’t’, ’a’, ’a’, ’t’, ’g’, ’c’, ’a’, ’a’, ’t’, ’t’, ’c’, ’g’) Agora, faça um programa ou script em Python para identi�car a quantidade de timinas (T) que existem nessa sequência. Resposta Correta 2. Usando a mesma sequência de DNA, faça um programa ou script para contar cada base. Resposta Correta Glossário HASH TABLE 06/12/2021 19:29 Disciplina Portal https://estacio.webaula.com.br/Classroom/index.asp?191C757E76=484D213C2740B0F19DC3C17D0E7D5F6153FE93CC57DDA5ED2325A3… 19/19 Também chamada de tabela de espelhamento, esta estrutura de dados contém pares chave-valor. Seu objetivo é fazer uma busca rápida e obter logo o valor desejado.
Compartilhar