Introdução à Programação em Python
Introdução à Programação em Python
computadores
[Link]@[Link]
Bibliografia
Júlio Magalhães 2
Python
• Linguagem de programação, ou seja, corresponde a um formalismo
para escrever programas.
• Um programa em phyton pode ser introduzido e executado
interactivamente num ambiente em que exista um interpretador do
phyton (algo que compreende as frases escritas em linguagem
phyton).
• Origens em 1992 com forte influência da linguagem ABC
• Também influenciada por outras linguagens: Angol, C, Haskell,
JAVA, Lisp, Perl, …
• Multiparadigma: Orientada a objetos, imperativa e funcional
Júlio Magalhães 3
Python
• Combina uma sintaxe concisa e clara com os recursos poderosos de
bibliotecas standard, módulos e frameworks desenvolvidos por
terceiros.
• Python é uma linguagem de alto nível. Possui tipagem dinâmica e
uma das suas principais características é permitir a fácil leitura do
código e exigir poucas linhas de código se comparado ao mesmo
programa escrito noutras linguagens.
• É bastante versátil e aplica-se a processamento de textos, dados
científicos e criação de CGIs para páginas dinâmicas para a web.
• É das linguagens mais populares do momento.
Júlio Magalhães 4
Python
• 2001 criada Python Software Foundation.
• Apoiada pela Microsoft, Google, …
• É incorporada em Sistemas Operativas BSD, MacOs, Linux
• Código aberto (Open Source)
• Tudo é encarado como sendo um objeto (até mesmo uma simples
variável)
• Inúmeras bibliotecas com fins variados - versatilidade
Júlio Magalhães 5
Python
• Áreas onde se aplica o Phyton:
– aprendizagem de programação;
– Inteligência artificial;
– Biotecnologia;
– Computação 3D;
– Automação;
– Cibersegurança;
– Partilha peer-to-peer (torrents);
– NASA;
– ….
Júlio Magalhães 6
Instalação
• Linux já tem instalado o interpretador Phyton
– sudo apt install python3.8
• Download para Windows: aceder ao website
[Link], descarregar e instalar
Júlio Magalhães 7
IDE – PyCharm
[Link]
Júlio Magalhães 8
Constantes e Variáveis
• As constantes podem ser números, valores lógicos ou cadeia de
caracteres. Sempre que é fornecida uma constante em Python, este
devolve a constante como resultado da avaliação.
• A representação externa de uma entidade é a representação como
vemos essa entidade. Ora, essa entidade, internamente terá outra
representação. Por exemplo, a representação externa do ano 2020
é a sequências dos dígitos pela ordem que escrevemos (2020)
enquanto que a sua representação interna será 11111100100
(binário).
Júlio Magalhães 9
Constantes e Variáveis
• Assim, se escrevermos a constante 2020, a resposta do Python será
2020.
• Exemplos:
>>> 2020
2020
>>> -1
-1
>>> +2
2
>>> ‘I love python’
‘I love python’
Júlio Magalhães 10
Variáveis
• Toda a variável é um objecto
• Uma variável é identificada com um nome
• Altamente recomendado que se utilizem nomes sugestivos para
melhor identificação do conteúdo dos dados dessa variável. Por
exemplo, uma boa sugestão de um nome para uma variável conter
a idade de uma pessoa seria o nome “idade”
• Recomenda-se que se inicie o nome da variável sempre com letra
minúscula ou com o caracter ‘_’
• Nome de uma variável será composto por sequencia de outros
caracteres alfabéticos incluindo o caracter ‘_’
Júlio Magalhães 11
Tipagem em Python
• Números inteiros
– Números sem parte decimal (com ou sem sinal)
• Números reais
– Números com parte decimal (com ou sem sinal)
– Normalmente representados em notação científica (muito
grandes ou muito pequenos)
Júlio Magalhães 12
Tipagem em Python
• Valores lógicos
– São representados por True e False
• Cadeia de caracteres
– Sequência de caracteres. São representadas por plicas ( ' ) ou
aspas(“)
– As plicas ou aspas não fazem parte da cadeia de carateres.
Assim, o seu comprimentos diz respeito apenas aos caracteres
que constituem essa sequência
– ‘Bom dia’ é uma cadeia com 7 caracteres (espaço também
conta)
Júlio Magalhães 13
Expressões compostas
• Para além de constantes, em Python existe um certo número de
operações embutidas (ou pré-definidas), que ele conhece
independentemente de qualquer indicação que seja fornecida por
algum programa.
• Uma expressão composta é constituída por um operador e por um
certo número de operandos.
• Operadores podem ser unários (not, - , ….) ou binários (+ , *, ….)
Júlio Magalhães 14
Expressões compostas
>>>2020-1980
40
>>> 3 * (5 + 12) // 2
25
>>> 3.0 * (5 + 12) // 2
25.0
>>> 5 > 12
False
Júlio Magalhães 15
Operações sobre números inteiros
Júlio Magalhães 17
Operadores e precedências
Júlio Magalhães 20
Variáveis reservadas
Júlio Magalhães 21
Output
• Função default «print»:
– print(“Bem-vindo ao Python”)
• >>>Bem-vindo ao Python
– print(3+5)
• >>>8
– print(‘3+5’)
• >>>3+5
– print(‘3’+’5’)
• >>>35
– print(‘Número’,7)
• >>>Número 7
Júlio Magalhães 22
Input
• Função default «input»:
– nome = input(“Qual o seu nome? ”)
• >>> Qual o seu nome? Júlio
– apelido = input(“Qual o seu apelido? ”)
• >>> Qual o seu apelido? Magalhães
– idade = input(“Qual a sua idade? ”)
• >>> Qual a sua idade? 30
– print(nome, apelido, idade) #print(f”{nome} {apelido} {idade}”)
• >>> Júlio Magalhães 30
Júlio Magalhães 23
Atribuição múltipla
• Python, permite fazer várias atribuições em simultâneo (cuidado…)
• <nome1>,<nome2>,…,<nomen>=<eprx1>,<expr2>,…,<exprn>
Ex:
>>> nome, apelido=‘Júlio’, ‘Magalhães'
>>> print(nome)
Júlio
>>> print(apelido)
Magalhães
>>> print(nome, apelido)
Júlio Magalhães
Júlio Magalhães 24
Exercícios
• Atribua a variáveis o seu nome, apelido, altura, idade e ano em que
nasceu.
Júlio Magalhães 25
Criação de scripts - IDLE
Júlio Magalhães 26
Exercícios
• Crie um script python que solicite ao utilizador o nome e que devolva como output
uma mensagem de boas-vindas a esse utilizador.
Ex: Qual o seu nome? Júlio
Qual o seu apelido? Magalhães
Olá Júlio Magalhães ! Seja Bem-vindo
• Crie um script python que solicite ao utilizador o dia, mês e ano de nascimento e
devolva como output algo parecido com o seguinte exemplo:
Ex: Dia? 25
Mês? dezembro
Ano? 1990
Você nasceu no dia 25 de dezembro de 1990
• Crie um script python que solicite ao utilizador 2 números inteiros e devolva a sua
soma. O que aconteceu?
Júlio Magalhães 27
Comentários
'''
sequencia de
comentários
'''
Júlio Magalhães 28
Tipos primitivos
• int -> 7 3 0 -3
a = int( input('insira 1 número: ‘))
b = int( input('insira outro número’))
s = a + b
print('soma é ', s)
Júlio Magalhães 29
Descobrir tipo da variável
• Analise o seguinte código:
##descobrir o tipo da variavel
n1 = input('Escreva 1 número: ')
print(type(n1))
n2 = int(input('Escreva outro número: '))
print(type(n2))
Júlio Magalhães 31
Continuando com output
• Analise os seguintes códigos:
Júlio Magalhães 32
Alinhamento no output
• Ocupar 15 posições de caracteres
nome = input('Escreva o seu nome: ') Escreva o seu nome: Júlio
print('O seu nome é {:15}!'.format(nome)) O seu nome é Júlio !
• Alinhar à direita
nome = input('Escreva o seu nome: ') Escreva o seu nome: Júlio
print('O seu nome é {:>15}!'.format(nome)) O seu nome é Júlio!
• Alinhar à esquerda
nome = input('Escreva o seu nome: ') Escreva o seu nome: Júlio
print('O seu nome é {:<15}!'.format(nome)) O seu nome é Júlio !
• Alinhar ao centro
nome = input('Escreva o seu nome: ') Escreva o seu nome: Júlio
print('O seu nome é {:^15}!'.format(nome)) O seu nome é Júlio !
• Alinhar ao centro com espaços preenchidos com um símbolo ‘*‘
nome = input('Escreva o seu nome: ') Escreva o seu nome: Júlio
print('O seu nome é {:*^15}!'.format(nome)) O seu nome é *****Júlio*****!
Júlio Magalhães 33
Formatação no output
• Como fazer para escrever o resultado de um valor float apenas com
3 casas decimais?
n1 = int(input('Insira 1º número: '))
n2 = int(input('Insira 2º número: '))
print('O valor da divisão de {} por {} é {}'.format(n1,n2,n1/n2))
Insira 1º número: 4
Insira 2º número: 3
O valor da divisão de 4 por 3 é 1.3333333333333333
Insira 1º número: 4
Insira 2º número: 3
O valor da divisão de 4.0
por 3.0 é 1.333
Júlio Magalhães 38
Exercícios
• Elabore em python um script que dado alguma coisa no input,
devolva como output:
– O tipo primitivo;
– É um número?
– É alfanumérico?
– É alfabético?
– Está em maiúsculas?
– Está em minúsculas?
– Está capitalizada?
Júlio Magalhães 39
Identações - tab
• O código em python tem de estar muito bem estruturado para que
o interpretador o consiga ler, caso contrário, poderá haver erros de
semântica
• Conhece a expressão: “99% dos erros informáticos está entre o
teclado e a cadeira”? Pois é, no desenvolvimento de código, os erros
são do programador, quer por erros de sintaxe quer por erros de
semântica.
• As operações que dizem respeito a determinado tipo de bloco têm
de estar devidamente identados, usando as tabulações.
Júlio Magalhães 40
Comandos de seleção
• if condição :
comandos
else :
comandos
Júlio Magalhães 41
Comandos de seleção
n = int(input('Escreva um número: '))
if n==10:
print('O valor inserido corresponde a uma dezena ({})'.format(n))
Escreva um número: 10
O valor inserido corresponde a uma dezena (10)
Obtemos como resposta a frase a dizer que o valor equivale a uma
dezena pois a condição de teste (n==10) deu valor Verdadeiro
Altere o código anterior para que devolva uma mensagem caso o valor
inserido não seja 10
Júlio Magalhães 42
Comandos de seleção - encadeados
• if condição :
comandos
elif condição : Escreva o seguinte código e experimente
comandos n = float(input('Escreva uma nota: '))
if n <= 5 :
elif condição : print('Mau')
elif n < 10 :
comandos print('Negativo')
…. elif n < 18 :
print('Positivo')
else : elif n <= 20 :
print('Muito Bom')
comandos else :
print('Valor inválido')
Júlio Magalhães 43
Comandos de repetição
• while condição :
comandos
n=10
while n>0 :
print (n)
n=n - 1
Júlio Magalhães 44
Bibliotecas e bibliotecas parciais
• Funcionalidades já implementadas e que podem ser usadas.
• Comando : import biblioteca (importa todas as funcionalidades
implementadas na biblioteca)
Ex: Biblioteca math
Funcionalidades: ceil, arredonda para cima,
floor, arredonda para baixo
trunc, trunca o número
pow, potência
sqrt, raiz quadrada
factorial, fatorial de um número
Júlio Magalhães 45
Bibliotecas e bibliotecas parciais
Exemplo:
import math
n1 = int(input('Insira 1º número: '))
print('O valor da raiz quadrada de {} é {} '.format(n1 , [Link](n1)))
Júlio Magalhães 47
Instrução for
• A instrução for é bastante útil para percorrer uma lista de valores.
Por exemplo, para escrever os valores no intervalo entre 10 e 20
utilizando o for seria baste simples:
Júlio Magalhães 49
Funções
• Programa para calcular o quadrado de x recorrendo a funções
###########################################################
#Função quadrado: recebe um valor e devolve como resposta o quadrado desse número
def quadrado (x):
resultado = x * x
return resultado
###########################################################
Júlio Magalhães 50
Funções recursivas
• Funções que se chamam a elas mesmas com valores intermédios
até chegarem ao cálculo mais básico para depois fazerem as
sucessivas substituições.
• Ex
def fatorial(n):
if n==0:
return 1
else:
return n * fatorial(n-1)
Júlio Magalhães 51
Manipulação de strings
• String significa uma cadeia de caracteres.
• Por exemplo, a frase “Curso de Python” é uma string.
• Python permite de uma forma tranquila, atribuir uma cadeia de
caracteres a uma variável:
– frase=“Curso de Python”
• Podemos olhar para uma string como sendo uma variável indexada,
ou seja, cada caracter tem um índice que inicia no 0.
• Assim, o índice da letra C é o 0 e o índice da letra y é o 10 (o
espaço também é um caracter e ocupa uma posição na string)
Júlio Magalhães 52
String
• frase=“Curso de Python”
• Para nos referirmos a um determinado caracter, utilizamos o nome
da variável “frase” com o índice pretendido. Ex: frase[9]
corresponde ao “P”.
• letra = frase[0] #a variável letra assume a letra “C” – índice 0 da
frase
Júlio Magalhães 53
String
• frase=“Curso de Python”
• No python, podemos obter parte da string de uma forma muito
linear. Por exemplo, se quisermos obter a sequência “Pyth” faríamos
algo do género: sequencia=frase[9:13]
• A variável sequencia, terá os caracteres da frase que começam no
índice 9 e vai até ao 12!!! O índice 13 não é considerado.
Júlio Magalhães 54
String
• frase=“Curso de Python”
• E se quiséssemos uma sequência mas com saltos de 2 em 2
caracteres?
• Simples: sequencia=frase[9:14:2] ; o resultado seria Pto
Júlio Magalhães 55
String
• frase=“Curso de Python”
• E se quiséssemos uma sequência do início até determina posição ou
de determinada posição até ao fim?
• sequencia=frase[:4] ; o resultado seria do início até à 3ª posição,
ou seja Curs
• sequencia=frase[9:] ; o resultado seria do índice 9 até ao final da
string, ou seja, Python
Júlio Magalhães 56
String
• frase=“Curso de Python”
• E agora, se pretendêssemos uma sequência da variável frase, desde
o início até ao fim mas com saltos de 3 em 3?
• sequencia=frase[::3] ; o resultado seria do início até ao final com
saltos de 3 posições, ou seja, CsdPh
Júlio Magalhães 57
String
• frase=“Curso de Python”
• Uma das ações mais utilizadas na análise de string, é saber o
comprimento de uma dada frase.
• x = len(frase) #a variável x assume o comprimento da variável
frase
• Neste caso, x ficaria com o número 15, uma vez que os espaços
também são caracteres.
Júlio Magalhães 58
String
• frase=“Curso de Python”
• Uma ação muito utilizada, é saber quantas ocorrências de uma dada
letra ocorre na string.
• x = [Link](‘o’) #a variável x assume a quantidade de
ocorrências da letra “o” na frase
• Neste caso, x ficaria com o número 2 pois a letra ‘o’ aparece 2 vezes
na frase
Júlio Magalhães 59
String
• frase=“Curso de Python”
• Desafio:
– Quantas vezes ocorre a letra ‘y’ da posição 3 até à posição 6?
– Quantas vezes ocorre a letra ‘y’ da posição 3 até ao final?
Júlio Magalhães 60
String
• frase=“Curso de Python e outro de Python”
• Outra situação bastante recorrente, será procurar uma dada
substring. Por exemplo, procurar “yth” na frase!
• [Link]("yth") irá devolver o índice 10 pois é neste índice que
inicia a primeira ocorrência da sequência a procurar
• [Link](“Linguagem”) irá devolver -1 pois a sequência
“Linguagem” não ocorre vez nenhuma
Júlio Magalhães 61
String
• frase=“Curso de Python e outro de Python”
• A instrução in é também muito utilizada. Permite-nos obter o
resultado booleno (True ou False), caso uma sequência ocorra ou
não na frase inicial.
• Ex:
– "Curso" in frase -> daria resultado True
– "curso" in frase -> daria resultado False
Júlio Magalhães 62
String
• frase=“Curso de Python”
• As strings são imutáveis. Só através de atribuição é que podemos
alterá-las.
• O que fará a instrução [Link]("Python",“Linguagem Python") ?
• Neste caso, a palavra a ser substituída é inferior ao que se pretende!
• O Python faz o aumento de índices automático.
• Se fizer um print ao conteúdo da variável, o que irá aparecer?
Júlio Magalhães 63
String
frase="Adoro Linguagem Python e também SQL“
• [Link]() -> o que for maiúscula mantém, o restante transforma
em maiúsculas. E se for um digito?
• [Link]() – mantém minúscula e altera as maiúsculas para
minúsculas
• [Link]() -> todos carateres em minúsculas e só o 1º é
capitalizado – maiúscula
• [Link]() -> Capitaliza todas as palavras. Só os 1º carateres são
maiúsculas
Júlio Magalhães 64
String
• frase=“ Curso de Python ”
• [Link]() -> remove espaços inúteis no inicio e no fim da frase.
Reposiciona nos índices corretos do array.
– E se tiver vários espaços no meio? (Feito de forma diferente…)
• [Link]() – o r significa rigth. Apaga espaços à direita (fim da string)
• [Link]() – o l significa left. Apaga espaços do início.
• lista = [Link]() – divisão da string, considerando os espaços. Faz
uma lista de arrays… onde a lista é numerada a partir da posição 0
• ‘-‘.join(lista) – junta os elementos de cada palavra separados por ‘-‘
• ‘-‘.join(frase) – o que aconteceria?
Júlio Magalhães 65
• Obter o número do carater
– ord(‘R’) -> 82
• Obter o caracter
– chr(125) -> ’}’
Júlio Magalhães 66
Listas
• É um novo tipo de estruturar os dados.
• É uma sequência de elementos de qualquer tipo.
• Muito semelhante aos tuplos
• Uma lista é um tipo de variável MUTÁVEL
• A ideia de lista é muito semelhante aos arrays e matrizes de outras
linguagens.
• Exemplo de listas:
– [1, 2, 3], [2, (1,2)], [‘a’], [], [1, [2], [[3]]]
Júlio Magalhães 67
Listas
Júlio Magalhães 68
Listas
• lst1=[1,2,3] e lst2=[[4,5]]
• lst = lst1 + lst2 # resulta na concatenação dos elementos
• len(lst) # qual o tamanho da lista lst?
• lst[3] # qual o elemento do índice 3 da lista lst?
• Para referenciar um elemento de outro que é uma lista, utilizamos
uma sintaxe idêntica aos tuplos. Por exemplo, para aceder ao 1º
elemento da lista ‘lst’ que se encontra na 4ª posição (índice 3)
utilizamos a referência lst[3][0] #4
Júlio Magalhães 69
Listas
• Mutabilidade:
– lst=[1,2,3,[4,5]]
– lst[2]=‘a’ # resulta em [1,2,’a’,[4,5]]
– del( lst[1] ) #apaga elemento do índice 1 -> lst=(1,’a’,[4,5])
– del(lst[1:]) # apaga todos os elementos do índice 1 até ao fim
Júlio Magalhães 70
Listas …. como “clones”
• A atribuição de listas a listas é uma atribuição simples. Por exemplo,
para lst1=[1,2,3,4], e pretendermos uma cópia desta lista basta
fazer a atribuição lst2=lst1.
• Ao procedermos a este tipo de atribuição, atenção:
– lst2[1]=‘a’
• lst2 fica com os seguintes elementos -> lst2 = [1,’a’,3,4]
• Mas lst1 também fica alterada -> lst1 = [1,’a’,3,4]
A instrução lst2=lst1 é como criar um link para a mesma lista
(lst1 e lst2 são “alias”/pseudónimos)
Júlio Magalhães 71
Listas…. como “clones”… ou não!
• Considerando os exemplos das listas anteriores:
– lst1=[1,’a’,3,4]
– lst2=lst1
• Se alterarmos o “scope” da lista:
– lst1=10 # deixa de ser lista e passa a ser variável com inteiro 10
– Qual o conteúdo da lst2? Pois é… uma lista. Quebra a ligação
de “clonagem”
Júlio Magalhães 72
Listas…. como “clones”… ou não!
• A criação de listas em python pode ser bastante fácil de criar. Por
exemplo, para criar uma lista de números de 1 a 100 basta fazer:
– lst= list( range(1,101) ) # o intervalo de 1 a 100 é convertido
em lista
– lst = [] #cria lista vazia
Júlio Magalhães 73
Listas
• Mantém herança:
– l1=[1,2,3,4]
– l2=l1
– l3=l1
– l1=100 #l2 e l3 mantêm valores do l1 anterior e l2 e l3 estão
ligados
– l2[3]=‘a’ # l2 -> l3 -> [1,2,3,’a’]
Júlio Magalhães 74
Listas
• Para fazer uma cópia do conteúdo de uma lista para outra:
– L1 = [1,2,3]
– L2 = [Link]()
– L1[0] = “X” # [‘X’,2,3]
– print(L2) -> resultado seria [1,2,3]
• O método copy() copia o conteúdo de uma lista para outra e não o
endereço de memória para onde aponta a primeira.
Júlio Magalhães 75
Tuplos
• Tuplo (tuple) é uma sequência de elementos
• Correspondem à noção matemática de vetor (variável indexada)
• Exemplos de tuplos em python:
– (), (1,2,3), (2, True), (5,)
• Nota: (5,) é um tuplo com apenas 1 elemento, o nº 5.
• Atribuição de um tuplo a uma variável:
– notas = (13, 10, 9, 12)
Júlio Magalhães 76
Tuplos
• notas = (13, 10, 9, 12)
• notas[0] # valor do tuplo na posição 0 -> 13
• notas[-2] # 2º valor do tuplo a começar do fim -> 9
• Podemos trabalhar com variáveis na indexação
– i=1
– print(notas[i+1]) # escreve o que está no índice 1+1 -> 9
• Erro na indexação:
– notas[i+10] #não existe índice 11, logo obtemos um erro
#IndexError: tuple índex out of range
Júlio Magalhães 77
Tuplos
• Um elemento de um tuplo, pode ser também um tuplo:
– a = ( (1,2,3) , 4 , (5,6) ) #tuplo “a” tem 3 elementos
• print(a[0]) # devolve o elemento do índice 0 -> (1,2,3)
• Como referir o elemento da posição 1 do elemento índice 0 do tuplo
“a”?
– a[0][1] # nº 2
Júlio Magalhães 78
Tuplos
• Tuplos em Python são imutáveis, ou seja, podemos
manipular/operar os elementos mas não podemos redefinir os seus
elementos.
• a = ( (1,2,3) , 4 , (5,6) )
• Se fizermos a[1] = 10, ou seja, em vez do 4 queremos substituir por
10, obtemos um erro. TypeError:’tuple’ object does not support item assignment
Júlio Magalhães 79
Manipulação de tuplos
Júlio Magalhães 80
Tuplos - manipulação
• a=(1,2,3)
• b=(4,5,6)
• c=a+b # concatenação de tuplos
• print(c) #(1, 2, 3, 4, 5, 6)
• print(c[2:4]) #(3, 4)
• print(3*a) #(1, 2, 3, 1, 2, 3, 1, 2, 3)
• print(3 in a) #True
• print(4 in a) # False
• print(a[:2]) # (1, 2)
• print(a[2:]) #(3,)
• print(len(a)) #3
• print(a[:]) #(1, 2, 3) 1º índice omitido então assume 0
# último índice omitido assume o fim do tuplo
Júlio Magalhães 81
Ficheiros
Júlio Magalhães 82
Ficheiros
• Abertura de ficheiro -> função open(“caminho”, “modo”)
• Fecho de ficheiro -> função [Link]()
• Modos de abertura de um ficheiro:
r – Modo de leitura
w – Modo de escrita
a – Modo de acrescentar
r+ - Modo de leitura e escrita sem truncamento
w+ - Modo de leitura e escrita com truncamento
Júlio Magalhães 84
Ficheiros – opções de leitura
• Modos de leitura:
read() Lê o ficheiro de uma só vez
read(N) Lê N Bytes
readline() Lê a próxima linha do ficheiro (incluindo o \n)
readlines() Lê e guarda como consequência de linhas (cada linha com \n)
Júlio Magalhães 85
Leitura de ficheiros
• Ficheiro [Link]
Linguagem Python é muito versátil.
Trabalhar com ficheiros em python é bastante intuitivo...
Os modos de trabalhar com ficheiros são: leitura, escrita, acrescentar, leitura e escrita sem truncamento e com truncamento
• Script:
fich = open("[Link]","r", encoding="UTF-8") ##fich contém informação sobre a ligação ao ficheiro físico
##Ex: <_io.TextIOWrapper name='[Link]' mode='r' encoding='cp1252’>
##Leitura de uma só vez ##Cria lista em que cada elemento é uma frase ##Le linha a linha ate fim do ficheiro
cont = [Link]() ## contabiliza nº de linhas que leu
conteudo = [Link]() print(cont) nl=0
for linha in cont:
[Link]()
print("linha:",linha)
print (conteudo) nl +=1
print("O ficheiro tem", nl,"linhas")
Júlio Magalhães 86
Ficheiros – modos de escrita
• Modos de escrita:
write(“string”) escreve a partir da posição do indicador de escrita. Esta
função retorna nº de carateres escritos no ficheiro.
Júlio Magalhães 87
Ficheiros – iterando com as linhas
Júlio Magalhães 88
Recorrer ao Sistema Operativo
import os
fich = “[Link]”
[Link](fich) #remove o ficheiro
listagem = [Link](“c:\Python\Exercícios\”) # obtém listagem da diretoria
Nota: [Link]
Júlio Magalhães 89
Bibliotecas personalizadas
• Podemos desenvolver pequenas bibliotecas, à nossa medida, e
utilizá-las noutros scripts que possamos desenvolver
• Precisam de ser criadas com a extensão “.py”
• Quando precisarmos carregá-las, apenas importamos o nome do
ficheiro (sem a extensão).
• Criar exemplo…. Uma biblioteca (quad) com a função quadrado
definida em que dado um valor, devolve o seu quadrado. Utilize
esta biblioteca no seu script.
Júlio Magalhães 90
Dicionário
• Dicionário é designado por dict (dictionary)
• É mutável e constituído por um conjunto de pares. O 1º elemento
de cada par dá-se o nome de “chave” e o 2º elemento o nome de
“valor” (chave1:valor1, chave2:valor2, …, chaven:valorn)
• Também apelidamos o dicionário de Lista Associativa.
• Os seus elementos de cada par pode ter tipos de valores distintos.
Ex: dici = {‘a’:1, ‘b’:2, ‘c’:(3,’a’,1)}
• Dicionário não pode ter chaves repetidas.
dici2 = {'a':1, 'b':2, 'a':(3,'a',1)}. Neste caso, o valor a ser
considerado é o último que identa a chave, ou seja, o valor tuplo
(3,’a’,1) Júlio Magalhães 91
Dicionário
• Os elementos de um dicionário, ao contrário dos tuplos e listas, não
são referenciados pelos seus índices mas sim pelas suas chaves.
Júlio Magalhães 92
Dicionário
• Exemplos:
– dici = {'a':1, 'b':2, 'c’:3}
• >>>dici[‘a’]
• 1
• >>> dici['x']=77 #acrescentar elementos…
• >>> dici
• {'a': 1, 'b': 2, 'c': (3, 'a', 1), 'x': 77}
Júlio Magalhães 93
Dicionário
• Quando a definição de dicionário tem chaves repetidas…
>>> dici2 = {'a’ : 1, 'b’ : 2, 'a’ : (3,'a',1)}
>>> dici2
{'a’ : (3, 'a', 1), 'b’ : 2}
Júlio Magalhães 94
Dicionário
• Quando referencia uma chave que não existe, obtém um erro:
>>> dici = {'a':1, 'b':2, 'c':(3,'a',1)}
>>> dici['b']
2
>>> dici['x']
Traceback (most recent call last):
File "<pyshell#12>", line 1, in <module>
dici['x']
KeyError: 'x'
Júlio Magalhães 95
Dicionário
• Operações com elementos de um dicionário são possíveis:
>>> dici = {'a':1, 'b':2, 'c':(3,'a',1)}
>>> dici['a’] = dici['a'] + 5
>>> dici
{'a': 6, 'b': 2, 'c': (3, 'a', 1)}
Júlio Magalhães 96
Operações sobre Dicionários
Elemento de
del(d[c]) Remove do dicionário d o elemento com a chave c.
dicionário
Júlio Magalhães 97
Concatenar dicionários
• Não podemos usar o operador ‘+’ para concatenar elementos de 2
dicionários, ao contrário de tuplos e listas, por exemplo.
• Utilizamos o método update():
– [Link](dicionario2)
• Exemplo:
– d1={'a': 1, 'b': 'd’}
– d2={‘c’:”ola”, ‘d’:”mundo”}
– [Link](d2) -> d1 resulta em {'a': 1, 'b': ‘d’, ‘c’:”ola”, ‘d’:”mundo”}
• Ou para juntar 2(ou mais) dicionários:
– d3 = {**d1, **d2}
Júlio Magalhães 98
Construir dicionários
• Por vezes pretendemos inicializar um dicionário de uma forma mais
ou menos automática, onde criamos as chaves para depois
podermos trabalhar os seus valores.
• Por exemplo, para criar um dicionário com as chaves dos números
de 0 até 30, utilizaríamos o construtor dict associado ao método
fromkeys.
Exemplo: d1 = [Link](range(30))
Resultado: {0: None, 1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None,
8: None, 9: None, 10: None, 11: None, 12: None, 13: None, 14: None, 15: None, 16:
None, 17: None, 18: None, 19: None, 20: None, 21: None, 22: None, 23: None, 24:
None, 25: None, 26: None, 27: None, 28: None, 29: None}
Júlio Magalhães 99
Construir dicionários
• Outra possibilidade seria, por exemplo, termos uma lista de cidades
e pretendermos criar um dicionário cujas cidades fossem a chave.
Exemplo:
lista = ['Braga','Lisboa','Porto','Chaves']
d = [Link](lista)
Resultado:
{'Braga': None, 'Lisboa': None, 'Porto': None, 'Chaves': None}
Resultado esperado -> {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81, 10: 100}
Como fazer? d = {n : n**2 for n in range(1,11)}
n:n**2 constrói o dicionário com a key a ser igual ao valor de n e o value será n ao
quadrado
for n in range(1,11) ciclo que permite criar um conjunto de resultados associados a n
>>> poema='O poeta é um fingidor.\nFinge tão completamente\nQue chega a fingir que é dor\nA
dor que deveras sente.\n\nE os que leem o que escreve,\nNa dor lida sentem bem,\nNão as duas que
ele teve,\nMas só a que eles não têm.\n\nE assim nas calhas de roda\nGira, a entreter a razão,\nEsse
comboio de corda\nQue se chama coração.’
{'O': 1, ' ': 52, 'p': 2, 'o': 19, 'e': 39, 't': 10, 'a': 24, 'é': 2, 'u': 10, 'm': 10, 'f': 2, 'i':
9, 'n': 9, 'g': 4, 'd': 11, 'r': 14, '.': 4, '\n': 13, 'F': 1, 'ã': 5, 'c': 8, 'l': 6, 'Q': 2, 'h': 3,
'q': 6, 'A': 1, 'v': 3, 's': 17, 'E': 3, ',': 5, 'N': 2, 'b': 2, 'M': 1, 'ó': 1, 'ê': 1, 'G': 1, 'z': 1,
'ç': 1}
Júlio Magalhães 104
Dicionários - exemplo
• Quantos carateres contém o poema sem espaços, virgulas, mudanças de
linha e outros caracteres de pontuação?
print(f"O poema tem {num_car_com_pont} caracteres (incluindo mudanças de linha e outras pontuações ", end='')
print("O poema tem {num_car_sem_pont} caracteres distintos(sem pontuações) ")
print("O poema tem {num_car} caracteres (sem pontuações) ")
>>> [Link]()
dict_keys(['Fernando Pessoa', 'Florbela Espanca', 'Eugénio de Andrade’])
>>> [Link]()
dict_values(['Autopsicografia', 'A mulher', 'É urgente o amor'])
valor = “'Autopsicografia”
for key, value in [Link](): # items() devolve lista onde cada elemento é 1 tuplo
if valor == value:
print(key)
copia_poetas = [Link]()