Você está na página 1de 19

Aula 2

Numbers qualquer )

é uma lista de Resultados (


por uma ordem

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

O valor que encontrei


maior
foi :
,
Max

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

Para devemos importar módulo Raiz quadrada


usar começar por o :
Sqrt

importmath f. trigonométricas sin cos tan

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

Para obter mais


informação :

Algumas operações só são possíveis



help (math )
informação geral determinados tipo
aos
com :

| específica sobre
" "

!
help ( math log ) Ola +42
> >>

mundo
.
uma
função
Traceback ( most Recent call last :

"º """""ª
"
File
"
< Stalin > ,
line 1
,
in < module >

Type ERROR can't convert.int


interpretador podemos objecttostr
'

No ,
usar
typel . . . ) :

>
type n +21-3 * 5- 1 Tfa.si/-ipExemps
int
'
class
'

inteiros inlt 1 -33 29

type 112 )

flat vírgula flutuante float


' '
ceass -

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

1+2 int + int int

Em
Python distinguimos números inteiros e
fracionários 3

vírgula flutuar e associando lhes tipos distintos


-
-
-
.

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
-

operação ; o Resultado será


float :


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 -

dos números Reais :

>
17/15 quociente da divisão inteira
3 >>> 8/3
> 17%5 Resto da divisão inteira 2. 6666 66666 666
6661
2

As operações sucessivas sobre estes números podem


Usando
álgebra exata :
fazer acumular erros de arredondamento !

33 3
Conversão
=
100-33×3=1
-


,

explícita entre tipos


contudo , usando
operações vírgula flutuante
-

obtemos Resultados diferentes :


>>> int / 2.71) > str / 3.14 )
-

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

100.0-33.0*3.0 7 3. O Value ERROR


-


foi ✗ 10

1. O

Concatenação strtstr STR

Repetição int * str str


Cadeias de Caracteres
" " " " "
"

tipo STR ( strings) olá


As cadeias de caracteres são valores de >>> t t Mundo
.

" '
Escrevemos texto entre Olá Mundo
o
aspas simples duplas ou .

" " ' " " " "

type ( olá ) →>


olá Mundo ! banana * Olá t Mundo
'
>
3
' '
>>> D>
' '
" ' '

olá Mundo ! banana class < str > ocáoeáocá Mundo


'

|
Podemos usar 3 aspas
para
introduzir cadeias de

caráteres com várias linhas .

Variáveis
!
'' '
Bom Dia
" "
- - -

olá Mundo :) ! •
Nomes
para Representar quantidades ou
propriedades
" "

Bom Dia ! In Olá Mundo :) ! dum


problema
- - -


Começam com uma letra ,
seguido de letras ,
números ou

Associa um valor de uma


expressão a uma variável : underscore .

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 ,

voltamos a executar a atribuiçã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

Exemplo : vamos anotar os valores de p e n após cada instrução .


Apresenta os Resultados
pretendidos de uma

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

2º o número colocado vai entrar nos

Final Final parênteses do


input , que o vai ler como

se
fosse uma
string .

3º após lido " "

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

import math MODULE Reconhece -


o como o Raio e
procede
à resolução do
programa .

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

Comentários Indique o valor do Raio :

°
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 .

Para lembrar como


funciona o
programa .
experimentando
Aula 4 def Refrão interpretador
: no
" "

print eá Mundo !
" "

print Bom Dia :

Definição de procedimentos e
funções Refrão
^
Olá Mundo !

Programação Estruturada

decompor
: um
problema Bom Dia :

em procedimentos mais simples até chegar às operações elementares .

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

instrução final sua linha .

> alinhadas numa mesma coluna .

°
Um procedimento é Receita Vamos procedimento anterior :
uma
para generalizar o

uma computação .

def Refrão n :

"
"
A
"

definição dum procedimento não executa print Se ,


n
elefantes incomodam muita gente
,
"

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

Required positional argumenta


'
: 1
missing
: .
n

Refrão l )
# 2ª
:
invocação Refrão 2,3
Type ERROR Refrão : takes 1 positional argument but Z were
given

Considere esta variação do procedimento anterior :

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

def função arg 1 Retorna resultado


ARGZ . . .
: um
, ,
.

O acontece executar ? >>>


(2)

Última instrução
que ao
Refrão ; A de uma
função deve

Trace Back most Recenteall last : Return Resultado ser Return .

"

instrução Return pode também


"
A
°
File pyshell #7 ,
line 1 ,
in module ser

Refrão (2) Exemplo : usada no meio do corpo para terminar

Name ERROR import Math função


'

defined
'
: name
Refrão is not a

volume ( R)
def :

✓ = 413 * math # R# * 3
.

pi
Return

import math
• Podemos Retornar o valor

def Volume R expressão diretamente


Return Print ?
:
de uma

Return 413 # math.pe#R**3 ou


Não é variável

necessário usar a

auxiliar volume 1 / R ) volume ZIR)


def def
: :
.

✓ = 413 # mathpi # R# *3 ✓ = 413 # mathpi # R# *3



Neste caso
,
a
definição é
simples e
suficiente . Return print
Mas tivesse 100 linhas de

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 -

Ringo são usadas pelo sistema de documentação .

Usamos help para pedir ajuda sobre módulo



um ou
procedimento :


Podemos documentar procedimentos help
e
funções usando : nome

Comentários Colocar comentários


strings
>
doc

e
ajuda o
programador a
compreender
doc
strings biblioteca
>
um
programa ou .

help volume
>> >

import Math # USAR


definições matemáticas Help Junction
on volume in module _
main _
:

volume R
def :

V
"
Calcula volume de dado
"
olume R
o uma
esfera o Raio R .

✓ 413 * math * R * * 3 Calcula volume de R


esfera
=
o de Raio
.

pi uma .

Return > anotações sobre

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
.

funções devem ter tipo bem definidos


.
.
. OS de .

i.
.

Exemplo argumento do procedimento Refrão deve ser inteiro


.

.
: o
"

controla Robô virtual


O tartaruga elefantes

número de
programa um o n


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 .

left 90 # Rodar 90º à


esquerda
Mais
turtle
geralmente
>>>

forward

#
. 200 avançar 200 pixels :

Em alternativa , podemos usar :


def função ✗ :
tipo 1 , y :
tipo 2 ,
. . .

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 .

refrão está à de inteiro parâmetro


-

e.
g. espera um como .

forward n avançar n pixels


backward n Retroceder n
pixels Construir um
quadrado evitando Repetições
left X Rodar ✗
graus
à esquerda
Right ✗ direita Repetimos 4 instruções :

Rodar ✗ à vezes duas
graus
color traço
mudar do
forward
cor →>
c a 100

pen size n mudar


largura do traço →>
left 90

pen down baixar a caneta

) levantar caneta Podemos Repetição código



a evitar de usando ciclo
pen up a um .

speed n mudar a velocidade da


tartaruga def quadrado :

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 .

Neste queremos apenas Repetir 4


caso ,
vezes .

Poderíamos ter usado outros valores .


Variantes função quadrado) _

def quadrado :
def quadrado :
def quadrado :

[ 1,2 3,4 ] { purple )


' '
blue
' '
# 3 Red
' '

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 .

Basta tomar parâmetro lado lado int


inteiro
def

como a medida do . quadrado :
:

( purplé]
' ' ' ' '

for blue
' '
C in Red , ,
green ,

def quadrado lado : int : color (c)


" "
Desenhar lado dado lado
um quadrado com cada .

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 •

Enquanto não percorremos todos os valores :



a variável toma o próximo valor na lista ;

for variável lista de valores : →


in executamos o
corpo do ciclo .

instrução 1

Depois do Último valor execução continua Resto do


programa
: a no

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
=

< ,

print mensg geá ,


Beatriz !

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 .

1 1.0 ( exemplo 0,1 2,3 :


, ,
. . .

2 1.4142135623730951

"

}
3 1.7320508075688772 "" "" "
"
"""" "" " """ ""
&" "

" "°

5 valores inteiros de O inclusive


'

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 .

Rangel d) valores inteiros

Exemplo

i
, n , i
,
itd ,
it Zd ,
it 3d ,
. . .

inferiores a n

Exemplo

:

Vamos função que nos


definir uma

Resultado do fatorial de Range 5)


forneça o n .

for ✗ in : # 0,1 , 2,3 ,


4

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ção for falsa .

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

O Resultado é valor lógico False


True
if ✗ % 2=-0 :
um ou .

" "
é
print X
, par
else :

If
\

print
" "

x é ímpar
else dentro G- else
,

-
de

if ✗<
y :

é indentação
" " •

print A indica estrutura das condições


× ,
menor
que , y a .

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 :

Apenas um nível de indentação .


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 .

pi >3 and math .


pi
< 4
equivalente
True

>>> not math pi .


>3
if not energia >
= 0.90 and escudo > =
100 :
if energia > 0.90 and escudo > = =
100 :

" " " "


False print O ataque não surte efeito .
print O dragão morre !
else : else :

" " " "

print O dragão morre ! print O ataque não surte efeito .

Ciclos

|

Encontrar o
primeiro natural n tal que :

while
1 + Zt . . .
t n 1000

No ciclo lista de valores


for

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

Para esses casos , podemos usar um ciclo while .


n =
n +1 # mais um natural
S =
stn # atualiza a soma

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
.

Por exemplo inteiro entre 1 1000


:
gerar um e

Números pseudo
-
aleatórios

POR vezes ,
necessitamos de simular acontecimentos
>> >
1+ int 1000 * Random Random .

aleatórios 731 O módulo Random inclui


no
computador :
funções
este
específicas para Simplifar processo .

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

simular eventos imprevistos


mais
genericamente :

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 .

Para aleatórios , devemos importar .it 1,1000


usar
geradores pseudo Random Rand
-
.

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 :

0.3904112430918001 D= Random Randit 1,6 .


3 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 .

antes do ciclo para dmax = Max dmax ,


d dmin = min dmin ,
d

inicializar dmax .

print dmax print dmin

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

obtidos Podemos inicializar


valores dcf
" "
semente

usando Seed
media h
função S
os : a a
. .

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

Randint print sln :


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 .

Probabilidades Random Seed 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 casos favoráveis


Frequência =

Número de experiências

exemplo : Simular o lançamento de dois dados ligeiramente diferentes em

execuções
contar quantas vezes somou 7
Sucessivas
e .

import Random

def # n° de
experiências simular
:
soma n a

57=0 contador acontecimentos


# de
favoráveis
for I in
Ranger n i

d 'l =
Random . Randint 1,6

d2 = 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

O humano tenta adivinhar importo turtle


jogador # comprimento de cada


passo
n :


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
.
,

import Random equivalente import Random turtle .

left angle

def jogo × :
def jogo × :

n = Random .
Randint 1,10 n = Random .
Randint 1,10

while × !=n : while × !=n :

" " " "

✗ = int input Escolhe um número de 1 ano :


print Escolhe um número de 1 ano :

int
if ✗ input
=
× > n :

" "

print ✗ é demasiado alto


if × > n :

" "
alto
elif ✗ <n : print ✗ é demasiado
"

elif
"
é demasiado baixo
print ✗ ✗ <n :
" "
é demasiado baixo
print
"

print está correto


"
X ✗
,

"

print está correto


"
× ,

Limites da janela
Testar se a
tartaruga está

Queremos tartaruga fica dentro da janela visível ( dentro janela


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

Return and and visível


✗ yah and
yth if
< W ✗ tw > = O > = o :

Random Randint
angle
= -
a a
.
,

turtle .

left anote
else :

Problema encontrar 3- 5×+2=0


solução
Aula 7
✗ turtle towards 0,0
: uma de uma equação como :
angle =
.

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 .

Vamos Newton é contínua [ a ; b]


f

ver o método de bisseção e o método de . em

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 :

atb 2 while b- a # critério de


eps paragem
m :

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

3 . Se fia) ✗ fim ≥ 0: Return - # ponto médio final


a Raiz está em [m ; b)

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 :
" " *

função f Xo está suficientemente



uma
perto da Raiz ✗

" "
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 = fx /dfx Return então


f
e '
valor absoluto 20 X é
0
Logo indifenido
=
* ✗o
,
ou
seja , .
, ×
,

while abs delta eps módulo ( divisão zero )


: o
por .

✗ =
✗ -
delta >> >
newton F
,
DF ,
1 ,
ne -4

Exemplo 2 3-2×+2
°

entao
JX =
f( ×) 1.7321428571428572 : se fcx) = ✗ e ✗ 0=0 ,

dfx df ( ) ✗a 1 , ✗ 2=0 ✗ 3=1 , ✗ 4=0 método


diverge
= x =
e o
, . . . _

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

Caracteres txtlo] txt [1] ,


:
, . . .


São sequências de caracteres

Índices negativos contam do


fim para o início :


Podemos tratá -
las como uma entidade única txt C- 1) = = txt feri tixt -
17 = = '
R
'

txt ten tixt -27



txtl 2) = = ' '
= = O
Mas também podemos aceder aos caráteres individuais
-

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 .

'
>>> '

Comparação de Cadeias txt =


Banana
>>> '
txt [ 27 =
n
'

txt 1 Trace Back


txt 2 ordem do dicionário most Recent call last


igual pela ordem
lexicográfica
=
menor ou :

?
" "
File < Stalin> ,
line I ,
in

' ' '


banana
'
>> >
abba Index ERROR : objecto support
doesn't
assignment
⇐ item

True
' '
txt [ :L? 1- [3 :]
' '
txtol
' '
>>>
abade < =
abacate >> > = n +

False >>> txtoi

print )
} A ordem
'
>>>
' '

B
'
ORD ,
ORD a entre caráteres corresponde à ordem Banana

66 97 dos númericos sistema Unicode


seus
códigos .
testar ocorrência Caracteres
códigos de

txtol in txtd testar se txtol ocorre dentro de tx-12



Vamos usar duas funções pré definidas -

para converter entre

caracteres numéricos
e
códigos :

'
>>> '
banana
' ' ' '
>>> ' banana ORD obter
'
numérico dum carater
ana in mana in c o
código C

True False chr n obter o carater com


codigo n

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 .

def texto txt ' '


:
B

for len / txt # lenltxt)


Ranger def
I in i 0,1 1 K : int , chistr
: = -

,
. . .
, str :

evitar que
para
print txtli ]
if ch - ''
a
''
and ch =
"
Z
"
: ntk saia do
alfabeto
7
" "
n = ORD ch -
ORD a

Usando um ciclo diretamente sobre os caráteres na cadeia :


Return

026 tord
" "
chr ntk a

else :

def texto txt :


Return ch
txt txtllenltxtl -11 texto
for Cifrar
I in : # i = txtco] txt a ]
um
. . .

, ,

print i

Para texto cada carater :


cifrar , percorremos o e
aplicamos Rodar a


Evita a necessidade da variável índice

Mais
geralmente for permite
ciclo

o
txt
definida anteriormente
:

def cifra K :
,

sequências
" "
percorrer quaisquer msg
=

txt Para basta


porch in :
descodificar ,

PROCURAR primeira ocorrência Rodar K ch Usar


cifra
msg msgt
a = a com o
,

Return deslocamento simétrico


msg
Vamos ch , txt
escrever uma
função primeira que
:

" "

ataque
" "
caractere ch txt 3
cifra 3, dwdtxh

procure se cadeia
cifra
-

um ocorre na
,
"

afirmativo
" "
dwdtxh "

primeira ocorrência ataque


em caso , Retorna o índice da

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

Sequências elementos ordenadas de


Podem conter elementos de tipos
' '

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 é

Usamos sintaxe de invocação de métodos txt operação significativo



a : .

argol ARGZ ,
,
. . .


Podem OCORRER elementos Repetidos
find índice da primeira ocorrência
Substituir ocorrências

Pode lista :[ ]
Replace ser a vazia

upper Substituir letras minúsculas por maiúsculas


lower substituir letras maiúsculas por minúsculas Acesso aos Elementos

'
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

, lista Ii j ) : elementos entre


iej-1 inclusive
> txt .
Repeace
'
a
'

,
'
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 [ ]

pela que dista K posições


" " " " " "
no e ,
i ,
o

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

beatles append ">


beatles
'
: →>
.

george
lista [ i j K] : :
>> >
beatles append .
'

paul
'

[ paul
' '

,
'

john
'

,
'

paul
'

,
'

george
'

,
'

Ringo
'

funcionam lógica elementos de beatles beatles


>> >
na mesma i a
j -
1 com .
sort

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

Listas dentro de listas


>>>

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

Elemento lista [i ] associado ao índice i 3

>
matriz [1) (2) =
5

PERCORRER todos os elementos [ [1,2 ,


-
a ] ,
[ 3. 1,5 ] , [ 0,1 -27 , ]
lista (O I
"
valor in lista "> " "
C
" "
à
"

for
>>> :
=
, ,

-
print valor

o

Evita manipular explicitamente o índice / UPCOS
E •

Preferível quando necessitamos dos valores mas

Sequências ordenadas de elementos :


.
á não dos índices

e1 , CZ , . . .
,
CN

Operações com listas •


Acesso aos elementos
por índices

Ao contrário das listas ,
os tuplos são imutáveis
>>>
a-tb

/ concatenação a = [ 1,2 3) ,
[1,2 , 3,3 4,5 ] ,
>>>
nota 0 ,
'

João
'
>>>
nota [ 17 =
"

João
"

[ 3,4 51 Type Error tupléobject


"
n
Repetição n vezes b =
,
3 a >> > nota [o] : does

[ 1,2 3,1 , 2,3 1,2 ]


3 O not item
, , ,
Support assignment
→> nota (11
Listas são mutáveis João

Podemos acrescentar elementos
modificar ou :

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

[ john ' '

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

Remover elementos de uma lista Atribuição atuplos de variáveis


>>>
beatles [ john
' '

,
'

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

Vamos acrescentar uma


agenda como uma lista de pares nome /email :

É importante distinguir o nome de uma variável da coleção


de valores associada a esse nome
agenda
=
[ "

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

[O] [01 Acrescentar /email


' ' ' •

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 :

métodos pré definidos :


Alguns append

agenda nome email


-
.
,

append acrescentar elemento


um ao
final
inseri acrescentar um elemento numa posição Fórmula Geral def acrescentar lista , tuplo :

Remove Remover um elemento lista append tuplo .

SORT ordenar os elementos por ordem crescente

Utilização lista método


: .

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

len contar valores comprimento


em alternativa : Sum somar todos os valores
max determinar o máximo

def procurar agenda ,


txt : min determinar o mínimo

emails = [1

for nome , email in


agenda :

Vamos definir funções


iftxtin nome :
para calcular outras
agregações .

emails .
append email

Return emails média aritmética de valores

Anotações
*
de tipos from typing import
Podemos def media valores List [
float] float

anotações de documentar de funções :


argumentos
:
usar
tipos para os
" "

O sistema de testes automáticos usa essas anotações para detetar potenciais erros Calcula a média aritmética de uma lista .

Nos Return Sum (valores len valores


exercícios anteriores usamos apenas tipos básicos : int , float ,


str , booc .


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

tipo tipo dentro da


quais o

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 :

f- 12,1 ] tem tipo List [ int ? Um •


ciclo sobre a lista de valores
[ hello
' '

,
'
world ! tem tipo List [str?

Acumular o
produto parcial
[ hello ] tem tipo List [ Any] O acumulador deve ser inicializado

,
42 com 1

-12,1 tem tipo Tuple T.int int ] ,


elemento neutro de multiplicação
tem tipo Tupee [ str.int]
'

alfa
'
12
,

tem tipo Tupee [str.int float] def produto valores :


Listlfloat? feoat
'
beta , 1,1-2 ' -
:
,

"
( 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 .

Anotando o exemplo Return acum #


fim do ciclo ; Retorna o Resultado


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

from typing import #


Listas em compreensão
from typing import #

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

Selecionar valores que


agenda append email respeitam
°

. nome
,
os uma condição

def procurar agenda : List [ Tuple [str ,


str? ] ,
Podemos efetuar estas transformações usando listas
txt : STR List [str] : em compreensã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
[
:

expressão for variável in sequência


e empleo : todos os inteiros inferiores a 100 que são múltiplos [ Rivo de Eratóstenes
de 5 e não de 3 .

Construir a tabela dos números


primos até n :

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

[ expressão for variável in


Sequência if condição todos os seus
múltiplos
Repetimos

o
processo : o
próximo número não

todos
Aula
Riscado é
primo e Riscamos os seus múltiplos
11
.

tabela contém todos



No números
fim : a os

menores do
primos que n .

eliminar elementos repetidos

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

então o Resultado deve ser a lista [ 2,1 3,4 ] , em 12/1314 1$ 16/1718/192/0 24

que cada valor ocorre apenas uma vez e


pela 2¢ 23 24/252/6 27/28/293/0
mesma ordem da lista original .

}
Seja lista original implementação do

✗S a : crivo :

→ Construímos uma nova lista ys •


Representamos a tabela de números por uma lista
→ Inicialmente ys =

Removemos da lista os números compostos

Para cada elemento ✗ na lista dada : •
No
final Restam apenas os primos

Se não ocorre ainda então
✗ em
ys ,
esta :<istiinti
aegoritmo acrescentamos ✗ àeista " .

des air. :

"
duma lista
"
Remove números
compostos .

lista
def elimina i
: =

nova = [I while i Cen lista :

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 ?

Seja lista original else



XS a : :

j jt "
-
_

→ Fazermos um ciclo sobre os índices i. = it 4 #


próximo número

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 .

repetidos haver list entre


sem pode Repetidos numeros =
Range 2 ,
n # 2 e n -
1

crivo numeros # Remove os compostos


XSIOI-g.n.gl/Sli-17-XSTiEXSTn-17 Return numeros # Retorna os
primos
" "

Listas ④compreensão

No final do ciclo , i = len ( ✗ S ) e a

lista não tem


repetidos .
em

lista E } S
def elimina -
:

i = O
while len lista considere matriz
triangular superior 4×4
i < :
a :

lista [it lista [0 : II :


if in

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

lista Também podemos usar


compreensões com vários
geradores .

[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

[ 1,1 , 1,1 , 0,1 , 1,1 , 0,0 1,1 , ,


0
, 0,0 , ^
Outro exemplo : Mais operações sobre _ cadeias

txt de caracteres
lisboa
Seja cadeia
' ' ' ' ' "
cidades Coimbra
porto uma
=
, , .

>>> ' ' ' ' '


mat
'
cursos
fis
=
,
Cc ,

txt Split lista das


.

partir a cadeia na

delimitadas
' '

for partes por espaços


+
✗ + cidades
y for ✗ incursos
yin

txt split lista


'

das
'

partir
'
cadeia
' ' ' ' '
lisboa
'
lisboa
' ' '
mat
por.to ,
mat ,
mat Coimbra ,
cc
porto ,
cc ,
Cc Coimbra ,
-
Sep a na

delimitadas pela cadeia sep


partes
' ' ' ' ' '
lisboa
fis porto , fis , fis coimbra

A ordem dos Resultados depende da ordem dos


geradores :
txtjoin lista juntar uma lista de cadeias numa

só usando txt como separador


' '

✗ t +
y for y in cidades
for ✗ in cursos

}
' ' ' ' ' ' ' ' ' '

pok.to lisboa
'
lisboa lisboa
'
mat mat
,
cc
porto , fis porto , ,
cc
, fis ,

' ' ' '


mat Coimbra Coimbra ' '

,
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 % .

def cifrar K: int , txtistr str :

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

Saída e continuação num ciclo

of
◦ ◦ ◦
o C, ,
og vírgula flutuante formato , exponencial ou decimal

instruções que permitem alterar


"
"
% f % 3 .
%e % math .
pi , mathpi ,
1000 Duas a execução de um ciclo :
" "

3,141593 3,142 1,00000 e 1- 03

break sair a meio do ciclo



o S Cadeia de caracteres continue passar à próxima iteração
/ % 4s
"

%
" "
" " " "

%
→> ◦
S o -4s A ,
BC , D
" ,

A / BC D Além :
Return termina resultado
◦ ◦
a
função e Retorna um

O caráter ( também interrompe qualquer ciclo



o o o

" "

% d% % o 12

12%

exemplo

def trign :

"
' ' ' ' ' '

% 7s % 7s %
'

print % 7s X
,
sinal , cos ( x )

for i in
Range n :

pi / a
✗ =
2 * i *
'

% 7.4%7.4%7.4 % ( × , Sinlx ) , coscx ) )


'

print

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 .

Operar ficheiros Exemplo tabelar função intervalo [ ]


fcx ) Sinlx )
com : : a =
no
-
no no
, .

}
3
fases
1 Abrir o
ficheiro
2 Ler e ou escrever no
ficheiro

Programa
3 Fechar o
ficheiro

f open caminho modo


=
,

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

importante : deve sempre close para usar garantir que o

é escrito corretamente

Exceções
ficheiro .

Exemplo de escrita

O •

programa
:

µÊ
" " "

test dat
"

f =
open "
-
,
w
" !
write olá Mundo !
f. ' '
n
''
<

write Adeus Mundo


f. . . . n
i

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 :

imprime o número e a linha em


que a
palavra ocorre
Lançar exceções

Podemos forçar uma exceção explicitamente :

Resultado
Raise exceção


Útil situações em não
que programa
em o

deve continuar

Evita valor correcto


confundir

um erro com o
exemplo fatorial :

Vamos definir função que calcula factoRial



uma o

de inteiro não
um
negativo .

Se argumento for negativo lança exceção



o , uma

apropriada .

Note que, tal como

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

Você também pode gostar