260 likes | 354 Views
Programação Avançada Tuplas, strings e dicionários. Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012. Relembrando. Tipos primitivos Simples (int, long, float, complex, string) Compostos Listas Tuplas Dicionários Conjuntos Definidos pelo usuário
E N D
Programação AvançadaTuplas, strings e dicionários Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012
Relembrando... • Tipos primitivos • Simples (int, long, float, complex, string) • Compostos • Listas • Tuplas • Dicionários • Conjuntos • Definidos pelo usuário • Classes
Tuplas • Sequências imutáveis de elementos • Funcionalidades semelhantes às listas • Definição de uma tupla >>>T = (1,2,3) >>>T[0] 1 • Tupla vazia () • Parênteses são opcionais, se não provocar ambiguidade • (10) inteiro • (10,) Tupla • 10, Tupla Se tiver apenas um elemento, é preciso colocar uma vírgula após o elemento.
Função tuple • Transforma um elemento em uma tupla >>>tuple (“abcd”) (‘a’, ‘b’, ‘c’, ‘d’) >>>tuple([1,2,3]) (1,2,3)
Utilização das tuplas • Estruturas que demandam valores imutáveis • Chaves de dicionários • Funções com números variáveis de argumentos • Formatação de texto
Formatação de texto • Formatação • Usado para criar strings misturando texto e valores de variáveis • Formato • String_template % valor • String_template contém texto e indicadores de variáveis • %s string • %d decimal • %f float • etc. • Exemplo • “Decimal %d” % 10 Decimal 10 • “Decimal %d float %f” % (10,10) Decimal 10 float 10.0000 • “%s tirou nota %d” % (‘João’, 10) João tirou nota 10 Mais detalhes sobre formatação em http://docs.python.org/library/string.html
Módulo string • Auxilia a manipulação de strings • Principais funções da classe string • String.find(substring) Retorna o índice da primeira aparição de substring em string • String.join(sequência_de_strings) Retorna uma sequência de strings em uma string, utilizando como separador o valor de String • Ex: “/”.join((‘1’, ‘2’, ‘3’))
Módulo string • String.replace(velho, novo) Substitui todas as instâncias de velho por novo em String • String.split(separador) Retorna uma lista com as partes de String separadas de acordo com separador • Ex: >>>a = “Frase de teste para entender o split” >>>a.split(‘ ‘) [“Frase”, “de”, “teste”, “para”, “entender”, “o”, “split”]
Exercício • Imagine que você está fazendo um teste que observe o que está acontecendo na rede através do comando ifconfig. O resultado do ifconfig é armazenado em uma string, mas você precisa apenas no número de pacotes que entraram e saíram da placa de rede. Faça uma programa que extraia esses dados do resultado de ifconfig e os guarde em uma lista [recebido, enviado]. Obs.: A saída do ifconfig é da seguinte forma: natalia@Natalia-UFF:~$ ifconfig eth0 Link encap:Ethernet HWaddr 14:da:e9:98:4f:1a inetaddr:200.20.11.31 Bcast:200.20.11.255 Mask:255.255.255.0 inet6 addr: fe80::16da:e9ff:fe98:4f1a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:322333 errors:0 dropped:0 overruns:0 frame:0 TX packets:12809 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37321973 (37.3 MB) TX bytes:1750252 (1.7 MB) Interrupt:41 Base address:0xa000 lo Link encap:Local Loopback inetaddr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1034 errors:0 dropped:0 overruns:0 frame:0 TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:151975 (151.9 KB) TX bytes:151975 (151.9 KB)
Dicionários • Estruturas semelhantes às listas, mas que: • Não tem ordem • O índice (ou chave) pode ser de qualquer tipo imutável • Formato • { chave1:conteúdo1, ... chaveN:conteúdoN} • O conteúdo associado a uma chave pode ser alterado • A chave não pode ser alterada • Ex: dicionario[chave]=“Novo valor” • Novos valores podem ser acrescentados pela adição de uma chave ainda não definida
Listas x Dicionários • Ex: Criando uma agenda com listas • Criar duas listas, nome e telefone, que armazenam o nome e o telefone no mesmo índice • Para acrescentar “Joao” com telefone “5019”: • nome+= “Joao” • telefone+=“5019” • Para encontrar o telefone de “Joao”: • Tel = telefone[nome.index[“Joao”]] Nome tel Joao 5019 Maria 2030 Jose 1818 i=0 i=1 i=2 Adiciona elemento no fim da lista Função de listas que diz o índice dado o valor buscado
Listas x Dicionários • Ex: Criando uma agenda com dicionários • Criar um dicionário cuja chave é o nome e o conteúdo é o telefone • Para acrescentar “Joao” com telefone “5019”: • telefone[“Joao”] = “5019” • Para encontrar o telefone de “Joao”: • Tel = telefone[“Joao”] Nome tel Joao 5019 Maria 2030 Jose 1818 i=0 i=1 i=2
Função dict • Usada para criar dicionários • Argumentos • Lista de tuplas (chave, conteúdo) • Ou sequência de itens no formato chave=valor • Nesse caso, as chaves TEM que ser strings sem aspas
Formatação de strings • Para usar dicionários para formatar strings, usar a chave do dicionário entre parênteses, após o % >>> dic = { "Joao":"a", "Maria":"b" } >>> s = "%(Joao)s e %(Maria)s“ >>> s % dic 'a e b'
Uso do for • Comando for pode ser usado para iterar sobre todas as chaves de um dicionário
Classe dict • Principais métodos • A=Dicionario.copy() Gera um novo dicionário com os mesmos pares chave:conteúdo • Atenção: O conteúdo não é copiado, mas sim referenciado >>> x = {"Joao":[1,2], "Maria":[3,4]} >>> y = x.copy() >>> y ["Pedro"]=[5,6] >>> x ["Joao"] += [3] >>> print x {'Joao': [1, 2, 3], 'Maria': [3, 4]} >>> print y {'Pedro': [5, 6], 'Joao': [1, 2, 3], 'Maria': [3, 4]}
Classe dict • Dicionario.clear() Remove todos os elementos do dicionário • Atenção: Método clear Atribuição de dicionário vazio >>> x = { "Joao":"a", "Maria":"b" } >>> y = x >>> x.clear() >>> print x,y {} {} >>> x = { "Joao":"a", "Maria":"b" } >>> y = x >>> x = {} >>> print x,y {} {'Joao': 'a', 'Maria': 'b'}
Classe dict • fromkeys(lista,valor) Retorna um novo dicionário com as chaves em listas associadas à valor • Valor vale, por default, None • Exemplos • >>> {}.fromkeys([2,3]) • {2: None, 3: None} • >>> dict.fromkeys(["Joao","Maria"],0) • {'Joao': 0, 'Maria': 0} • >>>dict.fromkeys([(["Joao","Maria"]) • {'Joao': None, 'Maria': None}
Classe dict • get(chave,valor) • Obtém o conteúdo de chave • Não causa erro caso chave não exista: retorna valor • Se valor não for especificado, chaves inexistentes retornam None
Classe dict • Dicionario.has_key(chave) Retorna True se a chave existe no Dicionário e False, caso não exista • Dicionario.items() Retorna uma lista com todos os pares chave/conteúdo do dicionário • Dicionario.keys() Retorna uma lista com todas as chaves do dicionário • Dicionario.values() Retorna uma lista com todos os valores do dicionário
Classe dict • Dicionario.pop(chave)Retorna o valor de chave e remove o par chave/valor do dicionário • Dicionario.popitem() Retorna e remove um par chave/valor aleatório do dicionário
Classe dict • Dicionario.update(Dicionario2) Atualiza Dicionário com as chaves de Dicionario2 • Atenção: Apresenta as mesmas questões da cópia de conteúdo que o update
Funções embutidas • len(dicionario) Retorna o tamanho do dicionário • key in dicionario Retorna True se a key pertence ao dicionário • key not in dicionario Retorna True se a key não pertence ao dicionário
Exercício • Imagine que você está fazendo um teste que observe o que está acontecendo na rede através do comando ifconfig. O resultado do ifconfig é armazenado em uma string, mas você precisa apenas no número de pacotes que entraram e saíram da placa de rede. Faça uma programa que extraia esses dados do resultado de ifconfig e os guarde em uma lista [recebido, enviado]. Essa lista deve ser inserida em um dicionario cuja chave é o nome da interface. Obs.: A saída do ifconfig é da seguinte forma: natalia@Natalia-UFF:~$ ifconfig eth0 Link encap:Ethernet HWaddr 14:da:e9:98:4f:1a inetaddr:200.20.11.31 Bcast:200.20.11.255 Mask:255.255.255.0 inet6 addr: fe80::16da:e9ff:fe98:4f1a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:322333 errors:0 dropped:0 overruns:0 frame:0 TX packets:12809 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37321973 (37.3 MB) TX bytes:1750252 (1.7 MB) Interrupt:41 Base address:0xa000 lo Link encap:Local Loopback inetaddr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1034 errors:0 dropped:0 overruns:0 frame:0 TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:151975 (151.9 KB) TX bytes:151975 (151.9 KB)