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
Se tiver apenas um elemento, é
 (10,)  Tupla
preciso colocar uma vírgula após o
 10,  Tupla
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
Mais detalhes sobre formatação em
 %f  float
http://docs.python.org/library/string.html
 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
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
inet addr: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
inet addr: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”]]
i=0
i=1
i=2
Nome
tel
Joao
Maria
Jose
5019
2030
1818
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”]
i=0
i=1
i=2
Nome
tel
Joao
Maria
Jose
5019
2030
1818
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
 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
>>> x = { "Joao":"a", "Maria":"b" }
>>> y = x
>>> x.clear()
>>> print x,y
{} {}
Atribuição de dicionário vazio
>>> 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
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
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
inet addr: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
inet addr: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)
Download

Programação Avançada Tuplas, strings e dicionários