Escolar Documentos
Profissional Documentos
Cultura Documentos
Numbers qualquer )
•
Íteramos lista
Exemplo iterações
•
de Sobre esta ,
atualizando o max
!
final
•
Apresentamos o max no
numbers =
[ 4
,
G ,
Z
,
S ,
3
,
7, 8 ,
9 ,
1
,
2 ,
4 ,
( . . . ) ]
Max
=
O
numbers
Linguagens formais
°
for I in :
para exprimir computação
if I > max :
i Sintaxe : Regras
formação de frases ( gramática
de
=
max
Semântica :
Significado associado cada
frase a
print ( )
" "
Outros exemplos de
linguagens expressões aritméticas ,
•
:
símbolos químicos
Operadores aritméticos básicos :
}
sintaxe semântica
•
Adição e Subtração : t -
•
" ""
" " " ° " "" " " * ° " " "" °" °
Exponenciação : * * 3 ✗ A 1- 2 OK 5
◦
Parênteses : × ) nt 2+13 erro
Números inteiros e
fracionários : 42 -
7 3.1416 H2O OK
água
Expressões incorretas :
Syntax ERROR " CRRO
~ ,
unçoes atematicas
|
Muitas math
funções e constantes estão disponíveis no módulo
Algumas funções e constantes do módulo math
"
"
math atan 2
S nomes das
funções começam com
prefixo f. trig . inversas as in acos atan
→> math .
sqrt (2) exponencial e
logaritmos exp log logro
1. 4142135623730951
IT
e ,
e
pi
math .
pi
3. 141592653589793
~ Os valores
-
são classificados em
diferentes tipos .
| específica sobre
" "
!
help ( math log ) Ola +42
> >>
→
mundo
.
uma
função
Traceback ( most Recent call last :
"º """""ª
"
File
"
< Stalin > ,
line 1
,
in < module >
No ,
usar
typel . . . ) :
>
type n +21-3 * 5- 1 Tfa.si/-ipExemps
int
'
class
'
type 112 )
1. O -0.025 3.1416
" "
Ola Mundo !
" ' '
'
type
'
Oea )
'
cadeias de texto STR ABC 9.29
< classista >
'
?⃝
As aritméticas
operações funcionam ambos tipos
•
ula 3
com os :
-
Em
Python distinguimos números inteiros e
fracionários 3
tipo
1. O -12.0
feoattfeoat float
exemplos 3. O
inteiros int 42 -7
Também
vírgula flutuante float floats
•
3.1416 misturar números inteiros
podemos e numa
-
•
Divisão entre inteiros dá "> 3 + 1.2 int +
float float
um
float :
4. 2
>>> at /5
Números inteiros Representados
°
3. 4 de
podem ser
forma
exata no computador .
•
Podemos obter o
quociente e o Resto da
divisão inteira Números
vírgula flutuante
°
operadores 11 % são
aproximações finitas
e : em
com -
>
17/15 quociente da divisão inteira
3 >>> 8/3
> 17%5 Resto da divisão inteira 2. 6666 66666 666
6661
2
33 3
Conversão
=
100-33×3=1
-
✗
,
'
-
2 -
3.14
'
100.0/3.0 )
"
>>> > "
3. O >>> 2.71 3
33.0 Round
float
-
1. 000000000000007 3 3.0
)
"
trinta
"
O arredondamento >>>
float (3) três
> >
erro de
"S
float e
≈
foi ✗ 10
1. O
" '
Escrevemos texto entre Olá Mundo
o
aspas simples duplas ou .
|
Podemos usar 3 aspas
para
introduzir cadeias de
Variáveis
!
'' '
Bom Dia
" "
- - -
olá Mundo :) ! •
Nomes
para Representar quantidades ou
propriedades
" "
•
Começam com uma letra ,
seguido de letras ,
números ou
area / R)
•
Podem ter letras acentos
def :
TIRZ com
import math
( math pi ) # R * *2 Não ter tabulações
podem
•
A =
-
espaços ou
( A)
print
Não
podem palavras Reservadas
•
ser :
↓
( 2o ) if Return
def
>>>
area and exec not
1256.637061435917 assert del
finally import OR try
break elif for in
pasos while
Mass else from is
print yiecd
continue except global lambda Raise
Atribuições perímetro
Se Recalcular
Comandos
quisermos o ,
expressão
=
nome >>>
perímetro =L *
mathpi * Raio
entrada
>>>
Raio =
1 12 .
perímetro
566370614359172
para
importmath e saída
>>>
perímetro =L * Math pi * . Raio
exemplo
perímetro
6. 28318530719586 In put ( ) lê uma cadeia de caracteres
do terminal (teclado )
:
doc
faz print de
string
o > numa
. uma
,
>>> Raio = 2 A atribuição é um comando, não é
equação
uma na shell
O
perímetro não altera automaticamente comando de entrada
perímetro
6. 28318530719586 por alterarmos o Raio
print
.
expor expor , ,
. . .
!
A ordem das atribuições é
importante escreve
terminal
resultados no
determinada expressão
Programa 1
Programa 1
1
explicando a
lógica
=
a = 1 n
p p →
p p →
n =L
p→ 1 n →2 n =L
p→ 1 n →2 1º a
lógica começa na
expressão
p =p
* n
p→ 2 n →2 n = n +1 p→ 2 n → 3 e no
parênteses mais
profundo .
+1 psz n → 3 * n
ps3 n → 3
p =p
= n
n
se
fosse uma
string .
transformado
Exemplo
o número ser e
strings
: em vai ser
transformado em
jloat .
teste .
py
RUN 4° tendo o número em
float ,
o sistema
print ( Indique
" "
o valor do Raio :
Raio
floatlinputl ) )
Sheee
=
perímetro 2 * math pi *
"
=
. Raio
"
print Perímetro da
circunferência :
, perímetro
= RESTART :C
°
Começam com o símbolo # e atendem até ao Pcrímeto da circunferência : 18.84955592153876
linha
fim da .
•
Permitem incluir documentação para outros programadores .
•
Também úteis para o autor .
print eá Mundo !
" "
Definição de procedimentos e
funções Refrão
^
Olá Mundo !
Programação Estruturada
•
decompor
: um
problema Bom Dia :
exemplo
lista parâmetros
°
A lista de
parámetros pode
def nome de : ser vazia .
instrução
primeira
instrução O
corpo consiste de instruções
•
mais
segunda
uma ou .
i
.
>
delimitadas pela identação ( cada instrução na
°
Um procedimento é Receita Vamos procedimento anterior :
uma
para generalizar o
uma computação .
def Refrão n :
"
"
A
"
•
"
instruções procedimento print
"
as apenas Regista o nt 1
, elefantes incomodam muito mais
dcf Refrão
: •
A variável n é um
parâmetro do procedimento .
#
; definição do procedimento
•
Para invocar o
procedimento temos de
especificar o valor de n .
•
As instruções são executados quando invocamos o
procedimento
>
Refrão 3
Se 3
elefantes incomodam muita gente
>
Refrão 4
procedimento elefantes incomodam muito mais
=
invocar o
Podemos de outro
°
Ao
procedimento procedimento temos
•
invocar um : invocar o de usar o número correto
de
argumentos .
)
def Repetir ( :
Refrão
# 1ª invocação
Refrão ( ) Type ERROR Refrão
'
Refrão l )
# 2ª
:
invocação Refrão 2,3
Type ERROR Refrão : takes 1 positional argument but Z were
given
def refrão
print "
"
n
Se
:
n
elefantes incomodam muita
gente ,
"
"
Definir =
unções
print incomodam muito Uma
função é procedimento
•
n +1
elefantes mais . um
que
"
defined
'
: name
Refrão is not a
volume ( R)
def :
✓ = 413 * math # R# * 3
.
pi
Return
import math
• Podemos Retornar o valor
e se a
definição código ?
Usar A
definição usando print não Retorna
> •
variáveis auxiliares com nomes
apropriados Resultado o .
ajuda a documentar o
programa
! •
É preferível definir procedimentos que Retornam Resultados .
•
Permite usar Resultado para outros fins além de imprimir
o .
-
mbito das Variáveis
•
Os parâmetros de um
procedimento são variáveis locais .
>>>
R =
42
Volume
•
valores >
São associados apenas dentro da 1
a
definição .
•
não temos de se esse nome é usado noutro contexto 4. 1887902047863905
nos
preocupar .
•
As variáveis auxiliares dentro de procedimentos também locais >>> R
definidas são .
÷
' '
Name ERROR V
: name is not
defined
Documentação •
As docas -
•
Podemos documentar procedimentos help
e
funções usando : nome
help volume
>> >
volume R
def :
V
"
Calcula volume de dado
"
olume R
o uma
esfera o Raio R .
pi uma .
Anotações
- como Se deve
de ipos comportar o
Í ! i. :
Módulo urffe
Vamos fazer
que desenham utilizando
programas
o
argumento
módulo Turtle :
argumentos
.
.
.
. OS de .
i.
.
.
: o
"
•
Desloca -
Se
para a
frente , para
trás e Roda
sobre próprio si
°
Podemos documentar usando anotações de tipo :
•
Usa uma caneta para pintar um Rasto
Muito desenhos
sofisticados ! def int
•
simples , mas
permite fazer Refrão "
n :
"
:
" "
Se incomodam muito
print ,
n
, elefantes gente ,
Devemos importar
"
print
"
módulo muito
começar por o : n +1 , elefantes incomodam mais .
>>>
import turtle
•
Para funções ,
anotamos os tipos dos
argumentos e do Resultado .
Os comandos têm a
forma Turtle .
Comando . . .
:
volume
def R:
feat feat
-
:
turtle .
dear # limpar a
janela =
4/3 * mathpi * R**3
>>> turtle .
forward 100 # avançar 100 pixels Return
>>>
turtle .
forward
•
#
. 200 avançar 200 pixels :
tipo R :
:
turtle
from import *
•
Return Resultado
e omitir o nóme do módulo :
a.
As anotações de tipo são
opcionais em Python .
>>>
clear
>>>
forward 100
•
Os executam quaisquer anotações
programas
sem .
left 120
>>>
triângulo
•
Contudo anotações conferem contexto permitem
forward 100 Construção de um : as ,
e mais
→>
left 120 facilmente detetar erros
lógicos nos
programas .
forward 100
O sistema
•
de testes automáticos da de
usa as
para mensagens
-
Comandos Principais
ERROS mais
informativas .
e.
g. espera um como .
clear limpar a
janela for lado in Range 4 : # Repetir 4 vezes
Reset limpar a
janela e Re -
inicializar a
tartaruga forward 100
left ao
lista de valores
Efetuamos ciclo sobre
•
um uma
•
O
corpo do
ciclo executa com a variável lado tomando
os valores 0 , 1,2 e 3 .
caso ,
vezes .
def quadrado :
def quadrado :
def quadrado :
for
'
^
'
4 0 2
I in
for in
for
: :
: i
Range , , , ,
c in , ,
green ,
(1Oo ) calor ( c )
forward (1Oo) forward
left 190 ) left ( 901 forward 100
left Go )
Generalizando . . .
Exemplo Maior : Uma espiral
Vamos
generalizar procedimento para desenhar from
•
o turtle import *
um
quadradrado com lado qualquer .
( purplé]
' ' ' ' '
for blue
' '
C in Red , ,
green ,
forward
for i in
Rouge 4 :
left 90
forward lado
left ( 90 Reset
Speed 10
desenhar
for
I #
Range
in 36 : 36 quadrados
Aula 4 :
repetir instruções usando ciclos for quadrado bot I # 5 # lados crescentes
Aula 5
.
com
left 10 #
ângulo entre os quadrados
•
O corpo do ciclo está indentado
[ICCOS for •
instrução 1
•
instrução 2
:
Exemplo :
[
" " " " "
instrução
"
Pedro
" "
n
amigos
= Ana
João Beatriz olá Ana !
> ^
, , , ,
Resto do
programa for nome in
amigos
:
"
Olá ,
João !
" " "
Olá + nome + ! Olá , Pedro !
mensg
=
< ,
2 importmath
for × in 0 ,
^
,
2 , 3,5 :
-
print × , math .
Sqrt ×
-
unção Range
Muitas progressão aritmética
°
O valores numéricos
0.0 vezes queremos efetuar um ciclo sobre em .
2 1.4142135623730951
"
}
3 1.7320508075688772 "" "" "
"
"""" "" " """ ""
&" "
" "°
2.23606797749979
Rangel n a n -1
Orange ln ) inclui
◦ zen. mas não Rangel i ,
n ) valores inteiros de i até n -
n inclusive
inclui o n .
Exemplo
◦
i
, n , i
,
itd ,
it Zd ,
it 3d ,
. . .
inferiores a n
Exemplo
•
:
print ×
def fatorial n :
p
= 1
for X in
Ranger ( 1O ) : # 0,1 , 2,3 , 4,5 , 6,7 , 8,9
for I in
Rouge
2 ntn
print ( x)
:
,
# i
p =p
print ( P)
for ✗ in
Ranger ( 3,10
) : # 3,2 , 4,5 , 6,7 , 8,9
print (x)
{ exemplo
Rialto ) for × in
Rangel 3,10 2) : # 3,5 7,9
facto
, ,
print ( ) x
3628800
execução condicional
v
•
A
O
a
expressão
condição
bloco
.
na
é
linha
executado
if é
if condição
instrução 1
else :
:
False
t True
após o
if se a
statements-2 Statements-1
condição for verdadeira .
Instrução 2
•
O blo após o else é executado se a
Condições
= = < '
igual ! '
' ' '
>>> =3 ' '
A
'
menor 11-2 = >>> 1+2>2+3 D> a = os> B < A
1. =
>
diferente
<=
>=
maior ou
igual Exemplo : True False True False
maior menor ou
igual
for ✗ in
Range S :
-
" "
é
print X
, par
else :
If
\
print
" "
x é ímpar
else dentro G- else
,
-
de
if ✗<
y :
é indentação
" " •
if ✗<
y :
else : •
Pode ser
fácil de ler com mais do que dois níveis .
print ✗ ,
"
é menor
que
"
, y
if × > y :
elif × > y :
O
elif
" "
Substitui
" "
else
•
print × ,
é maior que ,
y
o . . .
if .
print × ,
é maior que ,
y
else :
•
" "
é
igual
" "
print é
X , a , y print × ,
igual a , y
E ✗ em >①
Mais
geralmente
Conectivas
podemos simplificar
•
Lógicas
,
def maioridade (n ) : as
negações usando equivalências :
if n > = 48 :
and É maior A !
"
ambas
"
as condições são verdadeiras print de idade not A = =
B =
B
condições é B B
pelo if not A
A < > =
OR menos uma das verdadeira n < 18 :
hot
" "
RÕ a condição é falsa equivalente print Não é maior de idade A- < =
B A > B
:
etc
not
>>>
importmath if n > = 18
>>> math .
pi > 3 OR meth pi .
= =3
True
>>> math .
Ciclos
|
•
Encontrar o
primeiro natural n tal que :
while
1 + Zt . . .
t n 1000
especificamos a a
percorrer .
def natural n :
" " "" """ """" "" " " "" limite
•
" " " "" " "" " ° # "" "" "
vamos executar o ciclo .
5=0 # valor da soma 1+2 + . . .tn
while 5<=1000 : #
enquanto a soma não ultrapassa 1000
•
encontrou
print n # imprimir o número
que
while condição :
instrução 1
instrução
instrução a
Resto do programa
Podemos multiplicar
Aula
o Resultado para obter números noutro intervalo
6
.
Números pseudo
-
aleatórios
POR vezes ,
necessitamos de simular acontecimentos
>> >
1+ int 1000 * Random Random .
• >> >
1+ int 1000 * Random Random
Simular o lançamento de um dado .
•
baralhar uma
pilha de cartas 171
•
escolher uma
posição para um novo
objeto num
jogo
•
A
função Randint a. b
gera um inteiro
Podemos fazer tudo isto usando
geradores de números
pseudo aleatórios
-
pseudo aleatório
- entre a e b inclusive .
o módulo Random .
937
import Random
A
função Random
gera
intervalo [ -1C
um número
Exemplo : Simular 6 lançamentos de um dado de 6
faces
pseudo aleatório
-
no 0
, .
}
exemplo de execução
import Ramdom
>
Random 5 4
Random .
for I in
Ranger 6 :
print d 2 3
>>>
Random Random .
0.4508590778674775
import Random
import Random
•
Guardamos o maior
def maximo :
def minimo :
valor observado
variável dmax
na D= Random Randint
dmax =D
. 1,10
Analogamente D= Random Randint
dnnin =D
.
a
for I in
Ranger 5 :
for I in
Ranger 5 :
•
Primeiro lançamento D= Random Randint .
D= Random Rand .
inicializar dmax .
Prepetibilidade
Valor Médio •
OS aleatórios são
algoritmos determinísticas
geradores pseudo
-
" "
obtemos semente
a mesma
sequência se começarmos com a mesma .
•
Acumulamos a soma de todos import Random
5=0
•
Dividimos pelo número de for I in
Ranger )
:
•
Isto permite RepetibiCidade das
computações com números pseudo aleatórios
-
"
lançamentos "
. D= Random Randint 1,10 .
Exemplo
5=5 td
Random e números
geram
aleatórios distribuição O
pseudo programa produz
-
com
uniforme .
Import Random
sempre a mesma sequência
Semente
def n : de números
para cada n .
Estimar
.
foriinrangeao :
print Random .
Randint 1 ,
no
•
Podemos usar o módulo Random
para estimar
probabilidades calculando
frequência ocorrências
Obtemos valores
de .
Número de experiências
execuções
contar quantas vezes somou 7
Sucessivas
e .
import Random
def # n° de
experiências simular
:
soma n a
d 'l =
Random . Randint 1,6
if da + d2 = = 7 :
57=57+1
print 57 / n
Passeio Aleatório
JOGO -
É
-
O Vamos
um
usar os
passeio aleatório
módulos turtle
da tartaruga
e Random
:
para simular
O
computador
•
escolhe um inteiro aleatório entre 1 e 1000
•
Para cada tentativa , o
computador diz se é maior ,
menor ou # × : número de
passos import Random
Se acertou . # a :
ângulo máximo def passeio h
,
× , a :
for I in
Ranger × :
Exemplo : Turtle .
forwardn
Random Randint
angle
= -
a a
.
,
left angle
def jogo × :
def jogo × :
n = Random .
Randint 1,10 n = Random .
Randint 1,10
int
if ✗ input
=
× > n :
" "
" "
alto
elif ✗ <n : print ✗ é demasiado
"
elif
"
é demasiado baixo
print ✗ ✗ <n :
" "
é demasiado baixo
print
"
"
Limites da janela
Testar se a
tartaruga está
garantir que a .
da :
Para
°
isso , vamos usar
algumas funções extra do módulo turtle :
}
✗cord obter a coordenada horizontal da
tartaruga
YCORD Obter a coordenada vertical da
tartaruga
width obter
window - a
largura da
janela
window
height
_
obter a altura da janela
setheading definir a orientação da
tartaruga
towards ×, calcular orientação para ponto
y a um
def visível : #
verificar se a
tartaruga está dentro da janela importo turtle
W =
0.51¥ window -
width # dimensões da janela importo Random
h 0.51¥ window
height def
=
-
passeio n , × ,
a
✗ cord atual
for
✗ #
posição
=
iinrange × :
y ycord turtle
forward
=
. n
Random Randint
angle
= -
a a
.
,
turtle .
left anote
else :
h 3- 5
Equivalente : encontrar um zero da
função f ( X) =
✗ +2
,
isto é, o valor ✗O turtle .
Setheading angle
tal
que f ✗ 0=0 .
•
Para alguns casos ,
conseguimos exprimir a solução de
forma analítica exemplo : a
fórmula Resolveste do 2°
grau .
Partimos de :
•
Alternativa obter sequência numéricas
de
função f
•
: uma
aproximações que convergem para a Raiz .
uma
•
um intervalo [ a :b]
Xp , Xz , . . .
, Xn , . . .
•
a tolerância C O usada como critério
de
paragem
Quanto melhor será tais que :
•
fizermos
•
mais iterações ,
a
aproximação .
flat f ✗ b) O
[a ; b ]
f tem um Zero único em
Repetimos enquanto b -
a e :
1 .
calculamos o
ponto médio
def bissect
f , a ,
b , eps :
M
-
atb 2 # calcular o
ponto médio
2 .
Se
fia ) ✗
fim ) :
iffafm # atualizar um dos extremos
a raiz está em [ a ; m) D= in
b else ciclo
|
m : #
fim do
a =
m
a m
Exemplo
Em vez de
definir uma
função F ×
podemos usar uma
: expressão lambda :
Zero : ✗= 6
^
def
=
× : Encontrar a Raiz : bissect lambda X: 5* ✗ -
30 , 4 ,
7 ,
te -2
Return 5# ✗ -
30
•
do polinómio F × = 5×-30 5.998046875
•
no intervalo lo ;D
bissect F 4,7 Ae -2
•
40-2 A expressão lambda X : 5# X 30 Representa ✗ → 5×-30
com erro
função
-
a
, , .
5. 998046875
Método de Newton t|
10 to
check
12
slides
from Aulãt
•
Partimos de :
•
Supondo que :
" " *
" "
derivada função f
'
bem comportada
•
é
a
f a
& ×"
aproximação inicial à Raiz Xo Entao sucessão de aproximações definida ✗ =
Raiz ✗
*
uma por Xn converge para a
-
a
f
n+n ' .
✗n
uma tolerância e o
Paramos
•
Xn ✗n E
aproximação quando
-
a
,
.
-
Implementação Falha na
convergência
O método
dcf newton Newton pode
-
f df , ,
✗ 0, eps : de não
convergir se
✗ = ✗O >>>
def Fx : certas condições não se
verificarem .
fx f ( = ✗O Return 10 # ✗ * * 2- 30
dfx Exemplo 1
•
df ✗O abs ) DF 2
def
>>>
fornece ×) se
fcx) 1- ✗ tomarmos ✗ 0=0
= : =
o : e ,
✗ =
✗ -
delta >> >
newton F
,
DF ,
1 ,
ne -4
Exemplo 2 3-2×+2
°
entao
JX =
f( ×) 1.7321428571428572 : se fcx) = ✗ e ✗ 0=0 ,
delta =
fxldfx
Return X
Aula 8 txt
'
F e o R
'
txt =
'
Flor
'
O 1 2 3 >>>
lentxt
4
Cadeias de Caráteres •
Índices de 0 até lentxt -1
:
, . . .
•
São sequências de caracteres
•
•
Podemos tratá -
las como uma entidade única txt C- 1) = = txt feri tixt -
17 = = '
R
'
I!
.
>>>
txt [ 57
•
txtli : jt sub entre índices i 1 inclusive Trace Back most Recent call last
j
:
-
cadeia e -
•
?
" "
•
txt [ i :] Sub desde índice i até File < Stalin> line 1 Não podemos caráteres
-
cadeia ao
final , ,
in
modificar numa cadeia
•
txt [ : j] Sub cadeia desde inicio até ao índice 1 inclusive Index ERROR :
string Index out of Range
•
Mas podemos construir cadeia partir
o
j uma nova a
- -
de outras .
'
>>> '
?
" "
File < Stalin> ,
line I ,
in
True
' '
txt [ :L? 1- [3 :]
' '
txtol
' '
>>>
abade < =
abacate >> > = n +
print )
} A ordem
'
>>>
' '
B
'
ORD ,
ORD a entre caráteres corresponde à ordem Banana
caracteres numéricos
e
códigos :
'
>>> '
banana
' ' ' '
>>> ' banana ORD obter
'
numérico dum carater
ana in mana in c o
código C
cadeia
PERCORRER Definimos
>>>
ord deslocar
'
uma ' •
A uma
função para
65 as letras minúsculas K posições outros
Usando ciclo sobre todos os índices válidos : chr 66
ficam
um
caracteres inalterados .
,
. . .
, str :
evitar que
para
print txtli ]
if ch - ''
a
''
and ch =
"
Z
"
: ntk saia do
alfabeto
7
" "
n = ORD ch -
ORD a
else :
, ,
print i
•
Evita a necessidade da variável índice
Mais
geralmente for permite
ciclo
•
o
txt
definida anteriormente
:
def cifra K :
,
sequências
" "
percorrer quaisquer msg
=
" "
ataque
" "
caractere ch txt 3
cifra 3, dwdtxh
•
procure se cadeia
cifra
-
um ocorre na
,
"
afirmativo
" "
dwdtxh "
negativo
•
em caso ,
Retorna -1
def primeira ch ,
txt : # Procurar a 1ª ocorrência de chemtxt Aula 9 >> > alimentos =
[
"
pão
"
,
"
água
"
,
"
pão
"
]
lentxt >>> alimentos [ o ] >>> alimentos [ 2]
for i in
Range
:
{
if txtli] = =
ch : # encontrou pão pão
☆¥98
Return i # termina e retorna o índice
>> >
alimentos [ ^] >>> len (alimentos
#
fim do ciclo água 3
Return -
4
Santiago
'
→>
quaisquer
' •
primeira a ,
1-
•
Possivelmente com repetições
elementos são
identificados
'
Os
por índices
'
Santiago
' ' •
primeira e
,
Listas
por extensão
Métodos sobre cadeias
Listas elementos :[el , ]
°
el
suportam operações pré definidas , en
•
As cadeias várias - com n , . . .
A ordem é
•
argol ARGZ ,
,
. . .
•
Podem OCORRER elementos Repetidos
find índice da primeira ocorrência
Substituir ocorrências
•
Pode lista :[ ]
Replace ser a vazia
'
emplos I
•
e Operador de indexação : lista ( it
txt =
"
Banana
" •
Índices entre O elen lista -1 Fatias
=,
txt upper .
•
Índices negativos : acesso a partir do fim
'
BANANA Índices
'
inválidos dão
•
um erro na execução
' '
txt .
find ama
,
'
A
'
lista ( : j ] elementos do primeiro até
j -1 inclusive
lista [ i : ]
'
Banana
'
elementos entrei até ao
final
lista [ :] todos os elementos cópia da lista
cifra de César
O ^ 2 3 4
vogais { }
"
>>> " " " '' '' '' ''
'' ''
= a
,
e ,
i ,
o ,
u
•
Um dos métodos codificar texto
>>>
[ 1:47
mais
simples para um
Vogais
Cada letra é substituída alfabeto [ ]
•
>>>
ultrapassa letra volta à letra
Vogais [ :3]
'
Quando
• '
' '
a Z ,
a .
[ "
a
"
,
e i }
" "
,
" "
">
Exemplo :
para
K =3
,
a rotação é:
Vogais [ 3 :]
[ "
O
"
,
"
v
"
}
>>>
Vogais [ :]
[ }
" " " " '' '' '' ''
'' ''
a
,
e ,
i ,
o ,
u
Logo
" "
dwdtxh
" "
ataque é
:
codificado como
>>>
beatles
Fatias paul )
[ john beatles inserto
'
paul
' '
=
' ' '
> >>
, .
,
fórmula geral
'
george
lista [ i j K] : :
>> >
beatles append .
'
paul
'
[ paul
' '
,
'
john
'
,
'
paul
'
,
'
george
'
,
'
Ringo
'
incrementos K [ john
' '
,
'
paul
'
,
'
george
'
,
'
Ringo
'
) ">
beatles
[ george
' '
,
'
john
'
,
'
paul
'
,
'
paul
'
,
'
Ringo
'
]
valores inteiros
Ranger i , n , de i
,
itd ,
it Zd ,
it 3d ,
. . .
inferiores a n
vogais
[ : : 27 Percorrer os índices e elementos •
As listas podem conter outras listas
[
''
) Podemos matrizes
''
Representar tabelas
' ' '' '' ''
•
a ,
i ,
u assim ou
vogais [
1 : :L?
for I in
Ranger len lista : >> >
matriz = [ [a , 2 ,
-11 ,
C
[ "
e
"
,
"
o
"
] print i , lista Ii ) [3 , 1,01 , o q z
>
[
-21]
'' ' t
[o] (2)
◦ '
>>>
lo
'
[ -17 >> >
-
matriz
' '
: :
vogais ,
n ,
f 1 13 , 1,01 ,
[ ''
u
''
,
''
o
''
,
''
i
''
,
"
e
"
,
"
a
"
] °
Ciclos sobre índices i de O até len lista -1 ">
matriz (1) ( o] 2 lo ,
n , -21]
-
1
•
>
matriz [1) (2) =
5
for
>>> :
=
, ,
-
print valor
o
•
Evita manipular explicitamente o índice / UPCOS
E •
e1 , CZ , . . .
,
CN
/ concatenação a = [ 1,2 3) ,
[1,2 , 3,3 4,5 ] ,
>>>
nota 0 ,
'
João
'
>>>
nota [ 17 =
"
João
"
t * listas :
beatles = [a. 2,37 Operadores e
análogos aos de
>>>
beatles [01 =
' '
john
'
>> >
' '
>>>
beatles [2) ntn André
'
12
Ringo
= =
,
'
>>> '
beatles >>>
NTZ =
Ana ,
14
,
2 ,
'
Ringo ]
' >>> nt-1 tinta
]
" "
[ paul
' '
André
'
>>> 14
beatles [1:27
'
=
' '
12 Ana
,
george , , ,
>>>
beatles >> >
3# n-12
]
'
[ john
' '
Ana
' ' '
14
'
Ana
'
14
'
Ana 14
paul
' ' ' ' '
, ,
george ,
Ringo , , , , ,
,
'
paul
'
,
'
george
'
,
'
Ringo
'
]
del beatles [o] >>>
✗ , y
= 5 , -7 Ou simplesmente :
[ paul
' '
,
'
george
'
,
'
Ringo
'
] >> >
✗
>>>
✗ , y
= 5 , -7
>> >
5 ✗
Alternativa : 5
y
>>>
beatles
[ john
' ' '
paul
' '
george
' '
Ringo
'
] -7
>>>
y
, , ,
beatles [0:17 =
() -7
>>>
beatles
[
'
paul
'
,
'
george
'
,
'
Ringo
'
]
Listas e tuplos combinados
'
Bernado Portela
'
,
'
b.
poRtela@dcc.fc.up.pt
'
João jvilela@dcc.fc.up.pt
' '
Vilela
'
, , _
'
Dois
' '
Dois lista : Barbosa ivone.baRboSa@dcc.fc.up.pt
'
'
nomes ,
duas listas separadas : nomes ,
apenas uma vone ,
1
,
a = [ 1. 2,37 a = [ 4. 2,37
b = [ 1 , 2,31 b = a Operações :
tuplo
'
a
=
ops a
=
ops uma entrada : nome
>>>
print a , b >>>
print a , b
•
Procurar email pelo nome
[ ops
' '
, 2,3] [ 1 , 2,37 [ops '
, 2,3] [1 , 2,37
acrescentar uma entrada
Métodos sobre listas def acrescentar
agenda ,
nome ,
email :
: .
argumentos
Modificam lista
•
a
procurar Aula
um nome
10
def procurar agenda ,
txt : # procurar emails por parte do nome
emails []
Agregações
=
é
for parla para]
agregação operação
#par email email
agenda
= =
parir :
=
nome , ; nome : uma uma
iftxt in
par 101
: # txt ocorre em nome ? converte lista de valores
que uma
emails .
append parti .
# acrescenta email num Único Resultado .
Return emails
emails = [1
emails .
append email
Anotações
*
de tipos from typing import
Podemos def media valores List [
float] float
•
→
List [ 7 é das listas de
-
o tipo
Tuple [ Ta Ta? ,
é o tipo dos pares de Treta >>> Valores = [2 ,
3 ,
47
Tuple [Ta , -12 , -137 é o
tipo dos trios de Tg , Tae Tz >>> media valores
3.O
O de listas diz dos elementos lista
•
mas não o
comprimento .
produto de valores
•
O tipo de tuplos diz o tipo e também o número de elementos .
Se [ va ]
"
produto de
"
podemos
=
Un .vn
•
não
fixar tipo Any v2 , Na v2
- .
quisermos o ,
usar .
,
. . .
,
. . .
( 1 2,37 ,
tem tipo Listcint ]
Algoritmo :
,
'
world ! tem tipo List [str?
•
Acumular o
produto parcial
[ hello ] tem tipo List [ Any] O acumulador deve ser inicializado
•
,
42 com 1
alfa
'
12
,
"
( 107 , 12 -17? ,
tem tipo Listflistlintif Produto de valores numa lista .
"
[ 0,0 ,
O , -1 ] tem tipo listf-uplecint.int]) achem =
1. O # acumulador do
produto
for × in valores : #
percorrer todos os valores
acum = acum .
✗
→
Vamos de email
•
agora anotar as
funções da
agenda
Necessitamos da
seguinte linha início do
ficheiro produto [ 2.0 3.0 4. O ]
•
no : ,
,
24.0
Frequentemente ,
necessitamos de
transformar uma lista
def acrescentar
agenda : List [ Tuple [str ,
str? ] ,
de valores noutra :
nome : STR ,
email STR Aplicar transformação cada valor
•
: : uma a
. nome
,
os uma condição
emails =
[7
for nome ,
email in
agenda : Usando um ciclo : Usando uma lista em
compreensão :
lista = [ 7
if txt lista [✗ ( 1,10
=
2
for ✗
* *
in nome :
inrange
emails .
append email for Range
✗ in 1,10 :
a sintaxe acima é
Return emails lista append
. ✗ * * z
inspirada na notação
{ ✗
2
: ✗E { 1,2 , 3,4 , 5,6 , 7 , 8,9} }
Mais
geralmente
[
:
for
>>>
✗ in 100 ✗%5 O and ✗% 3 ! = O
✗
Range if
==
-
[ 5,10 , 20,25 ,
35 , 40 , 50,55 , 65,70 80,85 95 ] , ,
•
Escrevemos todos os inteiros de 2 a n
•
O número 2 é
primeiro primo e Riscamos
Sintaxe
geral : todos os seus
múltiplos
•
O 3 é
segundo número
primo e Riscamos
todos
Aula
Riscado é
primo e Riscamos os seus múltiplos
11
.
menores do
primos que n .
}
eliminar elementos Repetidos começamos todos inteiros até 3
anos
definir função para os com :
uma os
de uma lista .
exemplo se lista
original for [ 2,1 3,4 1,4 a ] 2 3 41 5 ∅ 7 ¢ 91 Vou Exemplo
: a
, , , ,
}
Seja lista original implementação do
•
✗S a : crivo :
des air. :
"
duma lista
"
Remove números
compostos .
lista
def elimina i
: =
for ✗ in lista : p
= lista i # p é primo
if not ✗ in nova :
j
= it 1
-
# Vamos Remover
múltiplos
while len lis
append j
-
:
nova . × a
Return lista lj ? :p
if = = :
nova
del lista lj ?
j jt "
-
_
Enquanto len #
fim
→
é da
função
i :
xs
menor
que
•
Se ✗S [ i] ocorre em XS [o] , XS [ 17 , . . .
,
então lista
✗S [i - 1?
,
Removemos xs li ? Esta função modifica a dada , não
•
Caso contrário , incrementamos i Retorna um Resultado .
→
Invariante do ciclo : não há Repetidos
List [ float] :
entre 0 e Í
def "
primos n: int
"
constrói lista de menores
a
primos que n .
Listas ④compreensão
→
No final do ciclo , i = len ( ✗ S ) e a
lista E } S
def elimina -
:
i = O
while len lista considere matriz
triangular superior 4×4
i < :
a :
a)
^ ^ ^ ^
{
del lista [it 1 sei ≤ j
° ^ ^ 1 Temos que
Aij
,
else : - =
0 i>
o o q a ,
se
j
i = i +1
o O O
esta função
modifica a lista dada , Podemos construir esta matriz usando uma lista
não Retorna uma nova lista compreensão dentro de outra :
/
v
into |
i
j for jinrange 4
for i in
Range
4
=
.
>
lista =
[2 , 1,3 3,1 , ,
4, 1 ] 1,1 ,
1
,
1
,
0,1 ,
1
,
1 O O 1
, , ,
1
,
0
, 0,0 , 1
elimina lista
,
>> >
[2 ,
1 ,
3 , 4) O Resultado é uma lista com todas as combinações
de elementos :
firit i =
j for jinrange 4
for i in
Range
4
txt de caracteres
lisboa
Seja cadeia
' ' ' ' ' "
cidades Coimbra
porto uma
=
, , .
partir a cadeia na
delimitadas
' '
das
'
partir
'
cadeia
' ' ' ' '
lisboa
'
lisboa
' ' '
mat
por.to ,
mat ,
mat Coimbra ,
cc
porto ,
cc ,
Cc Coimbra ,
-
Sep a na
✗ t +
y for y in cidades
for ✗ in cursos
}
' ' ' ' ' ' ' ' ' '
pok.to lisboa
'
lisboa lisboa
'
mat mat
,
cc
porto , fis porto , ,
cc
, fis ,
,
Cc ,
fis coimbra
Exemplos
Aula 12
formatação de texto
de César
Formatação % valores
cifra
Uma solução melhor :
O
formato
•
é cadeia de
uma caracteres com
campos marcados
por caracteres % .
lista
•
Um valores tuplo txt
agregados
=
Rodar k,c
for
:
ou mais num . c in
•
O Resultado é uma cadeia de caracteres Return
'' ''
lista
com os campos .
join
substituídos pelos valores correspondentes .
•
Construímos uma lista com os caracteres individuais Rodados
•
Usamos join caracteres lista
exemplos :
"
para juntar todos os numa nova
Pi é % % mathpi
"
O valor de f
'
O valor de Pi é 3.141593
'
Em de Devemos usar
vez : :
" "
>>>
%d Yod %d % 1 ,
6,2013
' " "
1/62013 lista
'
txt
" "
join
=
.
lista :
for × in
Alguns campos de
formatos txtitxttx
◦
d
Mais sobre ciclos
o inteiro com sinal
" ◦ ◦ "
◦ d, ◦ 3d ,
: 3d -
: 5. 5,5 . . .
' '
5 / 55
of
◦ ◦ ◦
o C, ,
og vírgula flutuante formato , exponencial ou decimal
%
" "
" " " "
%
→> ◦
S o -4s A ,
BC , D
" ,
A / BC D Além :
Return termina resultado
◦ ◦
a
função e Retorna um
" "
◦
% d% % o 12
12%
exemplo
def trign :
"
' ' ' ' ' '
% 7s % 7s %
'
print % 7s X
,
sinal , cos ( x )
for i in
Range n :
pi / a
✗ =
2 * i *
'
trig 11
Legenda :
◦
7.4
o
campo de
vírgula flutuante
com 7- caracteres no total e
4 casas decimais
◦
7 de texto 7- caráteres
o
campo com
no total
tabelar uma
funcão
Aula 13 .
Vamos
agora escrever um
programa que escreve um
②PCRAÇÔÉS Sobre
ficheiros ficheiro com uma tabela de valores calculados .
}
3
fases
1 Abrir o
ficheiro
2 Ler e ou escrever no
ficheiro
Programa
3 Fechar o
ficheiro
|
M◦dos
'
r
'
leitura ficheiro deve
já existir Execução
'
escrita
'
w se ◦
janeiro já existir : remove o conteúdo Produz um
" "
escrita
a se o
ficheiro já existir : acrescenta no
final ficheiro com
leitura
' '
wt e escrita 501 linhas :
é escrito corretamente
Exceções
ficheiro .
Exemplo de escrita
O •
programa
:
µÊ
" " "
test dat
"
f =
open "
-
,
w
" !
write olá Mundo !
f. ' '
n
''
<
f. close .
produz o
ficheiro Seguinte : .
Olá Mundo !
Adeus Mundo
apanhar exceções
CNET.ca/igodet-rat-amentodoerro
. . .
try :
#
código que poderá lançar um erro
Exemplo de Leitura
Algumas exceções pré -
definidas :
" "
"> " "
f
=
open test . dat ,
r Error leitura /escrita de
ficheiros
Value ERROR inválido
>>> txt =
f. Read
argumento ex .
:
Sqrt -1
→>
txt Index Errar índice fora dos limites
'
"
Olá mundo ! n Adeus Mundo . . . n
Type ERROR ERRO de tipos
>> >
f. close
de texto
Exemplo : conteúdo de um
ficheiro
codificação
Definir uma
função que lê e retorna o conteúdo de
• um
ficheiro ,
caso contrário Retorna a cadeia vazia
ocorrências de palavra
procurar uma
Uma
função para procurar uma
palavra num
ficheiro :
Resultado
Raise exceção
•
Útil situações em não
que programa
em o
deve continuar
de inteiro não
um
negativo .
apropriada .
Return, o comando
7
Raise termina a
execução da
funçao
-
Programa
{ Resultados
Aula 14
Rascunho
-
sqrtlx )
def
:
max _ , y
for × :
i in
while i
'
>
y