prof. natalia castro fernandes mestrado em ...natalia/prog_avan/slide4.pdf · listas tuplas...
TRANSCRIPT
Prof. Natalia Castro Fernandes
Mestrado em Telecomunicações – UFF
2º semestre/2012
Relembrando...� Tipos primitivos
� Simples (int, long, float, complex, string)
� Compostos
� Listas� 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 = (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])>>>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 de texto� Formatação
� Usado para criar strings misturando texto e valores de variáveis
� Formato� String_template % valor� 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 stringapariçã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 separadorpartes 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:~$ ifconfigeth0 Link encap:Ethernet HWaddr 14:da:e9:98:4f:1a
inet addr:200.20.11.31 Bcast:200.20.11.255 Mask:255.255.255.0inet6 addr: fe80::16da:e9ff:fe98:4f1a/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:322333 errors:0 dropped:0 overruns:0 frame:0RX packets:322333 errors:0 dropped:0 overruns:0 frame:0TX packets:12809 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:37321973 (37.3 MB) TX bytes:1750252 (1.7 MB)Interrupt:41 Base address:0xa000
lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:1034 errors:0 dropped:0 overruns:0 frame:0TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0collisions: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� 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 tel� Para acrescentar “Joao” com telefone “5019”:
� nome+= “Joao”
� telefone+=“5019”
� Para encontrar o telefone de “Joao”:
� Tel = telefone[nome.index[“Joao”]]
Função de listas que diz o índice dado o valor buscado
Nome tel
Joao 5019Maria 2030Jose 1818
i=0i=1i=2
Adiciona elemento no fim da lista
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”: Nome tel� Para acrescentar “Joao” com telefone “5019”:
� telefone[“Joao”] = “5019”
� Para encontrar o telefone de “Joao”:
� Tel = telefone[“Joao”]
Nome tel
Joao 5019Maria 2030Jose 1818
i=0i=1i=2
Exemplos
Função dict� Usada para criar dicionários
� Argumentos
� Lista de tuplas (chave, conteúdo)
� Ou sequência de itens no formato chave=valor� 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" }>>> 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� 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:
>>> 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'}
Método clear Atribuição de dicionário vazio
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])� >>> {}.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 Noneretornam 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árioDicionario.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 � 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
Classe dict
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 � 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:~$ ifconfigeth0 Link encap:Ethernet HWaddr 14:da:e9:98:4f:1a
inet addr:200.20.11.31 Bcast:200.20.11.255 Mask:255.255.255.0inet6 addr: fe80::16da:e9ff:fe98:4f1a/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:322333 errors:0 dropped:0 overruns:0 frame:0TX packets:12809 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:37321973 (37.3 MB) TX bytes:1750252 (1.7 MB)Interrupt:41 Base address:0xa000
lo Link encap:Local Loopbackinet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:16436 Metric:1RX packets:1034 errors:0 dropped:0 overruns:0 frame:0TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:151975 (151.9 KB) TX bytes:151975 (151.9 KB)