0% acharam este documento útil (0 voto)
4 visualizações111 páginas

Introdução à Programação em Python

O documento aborda a programação em Python, destacando suas origens, características, e áreas de aplicação, como inteligência artificial e automação. Ele também fornece informações sobre instalação, variáveis, tipos de dados, operações e formatação de saída. Além disso, inclui exercícios práticos para reforçar o aprendizado da linguagem.

Enviado por

carmirella
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
4 visualizações111 páginas

Introdução à Programação em Python

O documento aborda a programação em Python, destacando suas origens, características, e áreas de aplicação, como inteligência artificial e automação. Ele também fornece informações sobre instalação, variáveis, tipos de dados, operações e formatação de saída. Além disso, inclui exercícios práticos para reforçar o aprendizado da linguagem.

Enviado por

carmirella
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

50h – Programação de

computadores

5412 - PROGRAMACAO DE COMPUTADORES:


ESTRUTURADA

[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

** - potência (n**y => ny) ou utiliza função pow -> pow(n,y)


Júlio Magalhães 16
Operadores relacionais

Júlio Magalhães 17
Operadores e precedências

• / -> divisão de a por b


• // -> quociente (parte inteira) da divisão de a por b
• % -> resto da divisão de a por b
Júlio Magalhães 18
Utilização de operadores aritméticos
com strings
• Em Python, podemos utilizar os operadores aritméticos com strings
• Concatenação:
– >>>‘Olá’ + ‘Mundo’
– ‘OláMundo’
• Duplicação:
– >>>’Olá’ * 5
– ’OláOláOláOláOlá’
– >>> print(’Olá’ * 5)
– OláOláOláOláOlá
Júlio Magalhães 19
Atribuição de valores
• A instrução de atribuição de valores a variáveis tem importância
fundamental nas linguagens de programação imperativas, como é o
caso do python.
• A instrução recorre ao operador embutido ‘=’. Este operador recebe
2 operandos. O operando do lado esquerdo será o nome da variável
e o operando do lado direito o valor a atribuir à variável
Ex: idade = 30
nome_completo = ‘Júlio Magalhães’

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.

• Determine o ano em que nasceu dando como output algo


semelhante ao exemplo:
Júlio Magalhães, com 1.80m e idade 24 anos, nasceu em 2000.

Júlio Magalhães 25
Criação de scripts - IDLE

Criar ficheiro Escrever o código-fonte Executar

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

• # - tudo que escrever à frente do caracter #, por linha, será


ignorado pelo interpretador
• ''' texto ''' – as linhas de texto entre a plica tripla será ignorado pelo
interpretador

# comentário por linha

'''
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)

• float –> 4.5 0.321 -5.0 3.14

• bool -> True False

• str -> ‘Olá’ ‘7.5’ ‘’ ‘ ‘

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))

• Veja o tipo das variáveis para o mesmo input ‘7’


Escreva 1 número: 7
<class 'str'>
Escreva outro número: 7
<class 'int'>

Process finished with exit code 0


Júlio Magalhães 30
Formato de output em Python3
nome = input('Insira o seu nome: ')
print('O nome escrito foi {}.'.format(nome))
print(f'O nome escrito foi {nome}.')

• O bloco {} será substituído pela formatação e conteúdo da variável


nome.
• Abaixo, um exemplo de múltipla atribuição e output com 2 blocos de
substituição. O sinal ‘+’ significa que concatena o restante texto que
se segue.

nome, apelido = input('Nome: '), input('Apelido: ')


print('O nome escrito foi {}'.format(nome) + ' e apelido foi {}'.format(apelido))

Júlio Magalhães 31
Continuando com output
• Analise os seguintes códigos:

a = int(input('insira 1 número: '))


b = int(input('insira outro número'))
s = a + b
print('soma entre ', a, ' e ', b,' é de ', s)

a = int(input('insira 1 número: '))


b = int(input('insira outro número'))
s = a + b
print('A soma entre {} e {} é {}'.format(a, b, s))
#print(f'A soma entre {a} e {b} é {s}')

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

• Solução está no format do campo que pretendemos formatar:


n1 = int(input('Insira 1º número: '))
n2 = int(input('Insira 2º número: '))
print('O valor da divisão de {} por {} é {:.3f}'.format(n1,n2,n1/n2))
Júlio Magalhães 34
Formatação no output
• Podemos fazer vários prints no código mas indicar ao Python que a
frase de output é uma só.
n1 = int(input('Insira 1º número: '))
n2 = int(input('Insira 2º número: '))
print('O valor da divisão de {:.1f} '.format(n1))
print('por {:.1f} é {:.3f}'.format(n2,n1/n2))

Insira 1º número: 4
Insira 2º número: 3
O valor da divisão de 4.0
por 3.0 é 1.333

• Solução é colocar a expressão end=''


n1 = int(input('Insira 1º número: '))
n2 = int(input('Insira 2º número: '))
print('O valor da divisão de {:.1f} '.format(n1), end='')
print('por {:.1f} é {:.3f}'.format(n2,n1/n2))
Júlio Magalhães 35
Carateres especiais

n = input('Escreva qualquer coisa na linha abaixo:\n')


print([Link]())
print([Link]())
Escreva qualquer coisa na linha abaixo:
Julio77
False
False
Júlio Magalhães 36
Funções isnumeric(), isalpha(), …
• A função isnumeric() devolve um booleano, ou seja, devolve ‘True’
caso o valor de uma variável seja passível de conversão em
numérico ou devolve ‘False’ caso contrário. Vejamos:
n = input('Escreva qualquer coisa: ')
print([Link]())

Escreva qualquer coisa: Olá


False

Escreva qualquer coisa: 77


True

• A função isalpha() devolve booleano se todos os carateres


pertencem ao alfabeto (a-z,A-Z). Experimente…
Júlio Magalhães 37
Funções isnumeric(), isalpha(), …

• [Link]() -> é alfanumérico? ‘Palavra23’

• [Link]() -> é espaço? ‘ ’

• [Link]() -> letras maiúsculas? ‘PALAVRA’

• [Link]() -> letras minúsculas? ‘palavra’

• [Link]() -> palavra capitalizada? ‘Palavra’

«var» representa a variável

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

-> parte do else pode ser opcional.

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

Escreva um número: 12 Não obtemos qualquer resposta pois a condição


de teste (n==10) deu valor Falso

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

• for “variável” in “conjunto de elementos” :


comandos

for n in range(10, 20) :


print (n)

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

Comando: import math

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)))

• Bibliotecas parciais: from biblioteca import funcionalidade


(importa apenas a funcionalidade especificada da respetiva
biblioteca). Não precisa de escrever o evento biblioteca
• Comando: from math import sqrt, pow

from math import sqrt


n1 = int(input('Insira 1º número: '))
print('O valor da raiz quadrada de {} é {} '.format(n1 , sqrt(n1)))
Júlio Magalhães 46
Bibliotecas e bibliotecas parciais
• Bibliotecas disponível em [Link]
[Link]
• Exercícios:
– Importar a bib math completa e calcular a raiz quadrada,
potência, truncar e arredondar.
– Import biblioteca random e gerar 2 valores aleatórios e 2
aleatórios entre 1 e 10
• Nota: [Link]() – valor aleatório entre [0, 1[
[Link](x, y) – valor aleatório entre [x, y]

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:

for n in range(10, 20):


print (n)

• Se pretendêssemos escrever os mesmos números do exemplo mas


aparecendo no ecrã, segundo a segundo, basta importar a instância
sleep da biblioteca time e obrigar o interpretador a esperar 1
segundo:
from time import sleep
for n in range(10, 20):
print (n)
sleep(1)
Júlio Magalhães 48
Funções
• Servem para melhor estruturar os programas
• Composta por um nome e possivelmente argumentos: f(x,y)
• Ex:
def quadrado (x):
return x * x
O nome da função é quadrado
(x) É o argumento/parâmetro da função. É o valor dado no início da função. O “x”
será reconhecido dentro da função.
return x * x é uma expressão que pertence à função. Neste caso, sai da função e
responde a quem a chamou com um valor que é o resultado de x*x .
Se não existir return, a função apenas termina não devolvendo qualquer resposta a
quem a chamou

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
###########################################################

##Código principal do programa


print("Seja bem-vindo ao cálculo do quadrado de um número.\n")
valor = int( input("Introduza um valor: ") )
resposta = quadrado(valor)
print(f"O quadrado de {valor} é {resposta}")

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

• Um conjunto de dados conexo, por exemplo, um documento de


texto, uma música, uma imagem, …
• Identificado por um caminho(absoluto/relativo)
• Ao contrário de valores de variáveis, os ficheiros são persistentes
• Para o sistema operativo um ficheiro é sempre uma sequência de
bytes
• Suportes físicos: discos ou fitas magnéticas, memórias flash, CD ...

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

Quando o modo é “w+”, significa que elimina o ficheiro e todo o seu


conteúdo e cria novamente com o mesmo nome e com o conteúdo que
iremos lá colocar. Com “r+” irá sobrepor o novo conteúdo
[Link]
Júlio Magalhães 83
Ficheiros – modos de abertura
• Abertura do ficheiro “C:\TurmaA\[Link]”
ficheiro = open(“C:\TurmaA\[Link]”, “r”)

• Se o ficheiro [Link] estiver na mesma localização do executável,


então podemos dar o nome do ficheiro:
ficheiro = open(“[Link]”, “r”)

• Podemos na abertura de um ficheiro, forçar o tipo de codificação:


ficheiro = open(“[Link]”, “r”, encoding=“UTF-8”)

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")

#ou então…o número de elementos da lista


print(f"O ficheiro tem {len(cont)} 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.

writelines(“Sequência”) escreve 1 tuplo ou lista cujos elementos são


linhas de texto. Escreve a partir da posição do indicador de escrita cada um
dos elementos. Não representa qualquer indicação do final de um elemento
para o inicio do outro. Esta função não retorna qualquer valor.

Júlio Magalhães 87
Ficheiros – iterando com as linhas

• Modos de iteração (movendo o cursor de leitura):


seek() [Link](pos) – Movimenta para posição ‘pos’
tell() [Link]() – Indica a posição relativamente ao início

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.

>>> dici2 = {'a':1, 'b':2, 'a':(3,'a',1)}


>>> dici2['a']
(3, 'a', 1)

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}

• Elimina todos os pares cuja chave é repetida e assume apenas a


última.

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)}

• Verificar se uma chave existe num dicionário?


>>> 'z' in dici
False

Júlio Magalhães 96
Operações sobre Dicionários

Operação Tipos de Valor


argumentos

Elemento de
del(d[c]) Remove do dicionário d o elemento com a chave c.
dicionário

Chave e True se a chave c pertence ao dicionário d;


c in d
dicionário False em caso contrário
Chave e
c not in d A negação do resultado da operação c in d.
dicionário
len(d) Dicionário O número de elementos do dicionário d.

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}

• Ou ainda, para cada chave inicializar com um valor genérico para


que não seja atribuído o “valor” None
d = [Link](lista,0)
{'Braga’: 0, 'Lisboa’: 0, 'Porto’: 0, 'Chaves’: 0}

Júlio Magalhães 100


Construir dicionários
• Se trabalharmos com números, podemos ainda fazer algo mais
interessante (ou não )
• Por exemplo, criar um dicionário cujas keys sejam números de 1 a 10
onde os seus values são os quadrados desses números:

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

Assim, na construção do dicionário, para cada n:n**2 aplica o valor gerado


pelo ciclo for n in range(1,11)
Júlio Magalhães 101
Operações em Dicionários
>>> poetas = {'Fernando Pessoa':'Autopsicografia', 'Florbela Espanca':'A mulher',
'Eugénio de Andrade':'É urgente o amor’}

>>> for i in poetas:


print(i, 'escreveu', poetas[i]) #print(f”{i} escreveu {poetas[i]}”)
Fernando Pessoa escreveu Autopsicografia
Florbela Espanca escreveu A mulher
Eugénio de Andrade escreveu É urgente o amor

Júlio Magalhães 102


Dicionários - exemplo
No exemplo que se segue, temos um string ‘poema’ com um poema.
Cada verso encontra-se antes do caracter ‘\n’ e cada quadra antes de 2
mudanças de linha ‘\n\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.’

Júlio Magalhães 103


Dicionários - exemplo
Pretendemos agora criar um dicionário com a quantidade de vezes que
ocorre cada um dos caracteres.

{'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?

• Uma sugestão será criar uma lista de carateres especiais:

especiais = ['!','"','(',')','{','}','[',']','?','\','«','»', ',’ ,';','-','º','ª','+’,'*',' ','\n','<',’>’,’#’,’\t’]


Ou porque não criar uma sequência de carateres (string)?
especiais = '!"(){}[]?\«» ;-ºª+*,\\n<>#\\t'

Júlio Magalhães 105


Dicionários - exemplo
• Depois, aplicar o mesmo código mas apenas se o carater não fizer
parte dos carateres especiais
ocorre = {} ##dicionario vazio
for car in poema: ##para cada carater no poema...
if car not in especiais:
if car not in ocorre:
ocorre[car] = 1 ##inicializa a contagem do carater com uma ocorrência
else:
ocorre[car] = ocorre[car] + 1

Júlio Magalhães 106


Dicionários - exemplo
poema='O poeta é um fingidor.\nFinge tão completamente\nQue chega …'
especiais = ['!','"','(',')','{','}','[',']','?','\'','«','»', ',',';','-','º','ª','+','*',' ','\n','<','>'] Exemplo para
ocorre = {} ##dicionario vazio
for car in poema: ##para cada carater no poema...
determinar a quantidade
if car not in especiais:
if car not in ocorre: de carateres no poema,
ocorre[car] = 1 ##inicializa a contagem do carater com uma ocorrência
else: quantidade de carateres
ocorre[car] = ocorre[car] + 1
alfabéticos e quantas
num_car_com_pont = len(poema) ##qt de carateres que existe na string
num_car_sem_pont = len(ocorre) ##qts letras diferentes existem quadras existem.
##somar as quantidades de caracteres
num_car=0
for car in ocorre:
num_car = num_car + ocorre[car]

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) ")

qtt_quadras = [Link]('\n\n') + 1 ##1ª quadra não começa com '\n\n'


print(f"O poema tem {qtt_quadras} quadras")

Júlio Magalhães 107


Dicionários – Funções associadas
>>>[Link]()
dict_items([('Fernando Pessoa', 'Autopsicografia'), ('Florbela Espanca', 'A
mulher'), ('Eugénio de Andrade', 'É urgente o amor’)])

>>> [Link]()
dict_keys(['Fernando Pessoa', 'Florbela Espanca', 'Eugénio de Andrade’])

>>> [Link]()
dict_values(['Autopsicografia', 'A mulher', 'É urgente o amor'])

Júlio Magalhães 108


Dicionários – ações
• Obter um valor do dicionário:
– x = [Link]('Eugénio de Andrade’) #Resposta: 'É urgente o amor’
– O dicionário ficaria intacto
• Obter um valor do dicionário e removê-lo
– x = [Link]('Eugénio de Andrade') # Resposta: 'É urgente o amor’
– O dicionário ficaria: {'Fernando Pessoa’:'Autopsicografia’,
'Florbela Espanca’:'A mulher'}

• Verificar se um dado valor existe no dicionário sem saber qual a sua


chave:
– “A mulher” in [Link]() #resposta: True
Júlio Magalhães 109
Obter “key” dado um “value”
poetas = {'Fernando Pessoa':'Autopsicografia', 'Florbela Espanca':'A mulher',
'Eugénio de Andrade':'É urgente o amor’}

valor = “'Autopsicografia”

for key, value in [Link](): # items() devolve lista onde cada elemento é 1 tuplo
if valor == value:
print(key)

Júlio Magalhães 110


Cópia de dicionários
poetas = {'Fernando Pessoa':'Autopsicografia', 'Florbela Espanca':'A mulher',
'Eugénio de Andrade':'É urgente o amor’}

copia_poetas = [Link]()

Atenção quando fazemos

copia = poetas # copia é um ‘alias/pseudónimo’ de poetas


copia e poetas, são 2 variáveis que apontam para o mesmo conteúdo
em memória…

Júlio Magalhães 111

Você também pode gostar