![Page 1: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/1.jpg)
Fundamentos da Programação
Capítulo 4: Tuplos e ciclos contados (ciclos contados e cadeias de caracteres revisitadas)
![Page 2: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/2.jpg)
Ciclos contados• Semântica
Ao encontrar a instrução:
for var in exp:
<instruções>
• O Python executa as instruções correspondentes a <instruções> para os valores da variável var correspondentes aos elementos da sequência resultante da avaliação de exp
• No corpo do ciclo de uma instrução for pode também ser utilizada a instrução break
![Page 3: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/3.jpg)
Expressão rangeSintaxe
Todas as expressões têm um valor inteiro
![Page 4: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/4.jpg)
Expressão rangeSemântica• range(n) devolve a sequência contendo os inteiros entre 0 e n-1. Se
n ≤ 0, devolve a sequência sem elementos• range(n1, n2) devolve a sequência contendo os inteiros entre n1 e n2-1.
Se n2 ≤ n1, devolve a sequência sem elementos• range(n1, n2, n3) devolve a sequência contendo os inteiros que
começam em n1 e nunca sendo superiores a n2-1 (ou nunca sendo inferiores a n2+1, no caso de n3 < 0), em que cada elemento da sequência é obtido do anterior somando n3, ou seja corresponde à sequência n1, n1+n3, n1+2*n3, ....
![Page 5: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/5.jpg)
Ciclos contados – Exemplo def soma_elementos(t):
soma = 0
for i in range(len(t)):
soma = soma + t[i]
return soma
>>> soma_elementos((1, 2, 3, 4))
10
![Page 6: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/6.jpg)
Exemplo• Predicado tuplo_ordenado, devolve True apenas se o tuplo que é seu
argumento estiver ordenado
![Page 7: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/7.jpg)
Exemplo• Predicado tuplo_ordenado, devolve True apenas se o tuplo que é seu
argumento estiver ordenado
def tuplo_ordenado(t):
for i in range(len(t)-1):
if t[i] > t[i+1]:
return False
return True
![Page 8: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/8.jpg)
Funções com número arbitrário de argumentos• A função print aceita qualquer número de argumentos
print()
print(x, ‘é o resultado de elevar ‘, y, ‘a ‘, x)
• Como escrever funções deste tipo?
![Page 9: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/9.jpg)
Número arbitrário de argumentos• Sintaxe
• Semântica• Ao encontrar a chamada, o Python associa os n-1 primeiros parâmetros
formais com os n-1 primeiros parâmetros concretos e associa o último parâmetro formal (o nome antecedido por *) com o tuplo constituído pelos restantes parâmetros concretos
![Page 10: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/10.jpg)
Exemplodef ex_fn(a, b, *c):
print('a =', a)print('b =', b)print('c =', c)
>>> ex_fn(3, 2)a = 3b = 2c = ()>>> ex_fn(3, 2, 5, 6, 7, 8)a = 3b = 2c = (5, 6, 7, 8)>>> ex_fn(3)TypeError: ex_fn() missing 1 required positional argument: 'b'
![Page 11: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/11.jpg)
Cadeias de caracteres• Introduzidas como constantes – qualquer sequência de caracteres delimitada
por plicas ou por aspas• Usadas para produzir mensagens para o utilizador
![Page 12: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/12.jpg)
Cadeias de caracteres• Introduzidas como constantes – qualquer sequência de caracteres delimitada
por plicas ou por aspas• Usadas para produzir mensagens para o utilizador
• As cadeias de caracteres correspondem a um tipo estruturado de dados, designado por string, o qual corresponde a uma sequência de caracteres individuais
![Page 13: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/13.jpg)
Cadeias de caracteres• Representação externa
<cadeia de caracteres> ::= '<carácter>*' |
"<carácter>*" |
"""<carácter>*"""
''e "" correspondem à cadeia de caracteres vazia
![Page 14: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/14.jpg)
Cadeias de caracteres"""<carácter>*"""
• Cadeias de caracteres de documentação
• Quando o Python encontra uma cadeia de caracteres de documentação, na linha imediatamente a seguir a uma linha que começa pela palavra def, associa o conteúdo dessa cadeia de caracteres à entidade que está a ser definida
• Permite a consulta rápida da informação associada com a entidade definida, recorrendo à função help
![Page 15: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/15.jpg)
Operações sobre cadeias de caracteres
![Page 16: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/16.jpg)
Exemplo – caracteres em comumdef c_comum(cc1, cc2):
res = ''for e1 in cc1:
for e2 in cc2:if e1 == e2 and e1 not in res:
res = res + e1return res
>>> c_comum('agbdcu', 'ggat')'ag'
![Page 17: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/17.jpg)
Representação interna de caracteres• Cada carácter é representado internamente por um inteiro
• Vários modos de codificar carateres
• ASCII (American Standard Code for Information Interchange) – 128 caracteres
• Unicode
![Page 18: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/18.jpg)
ASCII
![Page 19: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/19.jpg)
Funções embutidas• ord
• recebe um carácter (sob a forma de uma cadeia de caracteres) e devolve o inteiro correspondente ao código decimal que o representa
• chr• recebe um número inteiro positivo e devolve o carácter (sob a forma de uma
cadeia de caracteres) representado por esse número>>> ord('R')
82
>>> chr(125)
''
![Page 20: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/20.jpg)
Operadores relacionais<, >, >=, <=, ==, !=
>>> 'a' < 'b'True>>> 'a' > 'A'True>>> 'abc' > 'adg'False>>> 'abc' < 'abcd'True
![Page 21: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/21.jpg)
Exemplo
ABB33BBBC
![Page 22: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/22.jpg)
Cifragem de mensagens• Cifra corresponde a substituir as letras da mensagem por outras letras através
de um algoritmo conhecido pelo recetor da mensagem• Cifra de substituição, substitui cada letra da mensagem por outra letra de
acordo com um certo padrão• A primeira utilização foi feita por Júlio César (100-44 a.C.) durante as Guerras Gálicas,
sendo também conhecida por cifra de César
![Page 23: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/23.jpg)
Cifra de substituição• Cada letra da mensagem é substituída pela letra que está um certo número de
posições à sua direita no alfabeto, o deslocamento• Se o deslocamento for 5, A será substituída por F, B por G e assim
sucessivamente
ABCDEFGHIJKLMNOPQRSTUVWXYZ
FGHIJKLMNOPQRSTUVWXYZABCDE
• A cifra de César corresponde a 26 cifras de substituição, uma para cada letra do alfabeto
![Page 24: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/24.jpg)
Cifra de substituição• Cada letra da mensagem é substituída pela letra que está um certo número de
posições à sua direita no alfabeto, o deslocamento• Se o deslocamento for 5, A será substituída por F, B por G e assim
sucessivamente
ABCDEFGHIJKLMNOPQRSTUVWXYZ
FGHIJKLMNOPQRSTUVWXYZABCDE
![Page 25: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/25.jpg)
Exemplo• Função codifica recebe uma maiúscula, c, e o deslocamento, desloc (apenas
considera letras maiúsculas)1. Calcula o seu código ASCII: ord(c)
2. Calcula a distância a c se encontra em relação ao início do alfabeto, ord(c)-ord(’A’)
3. Soma desloc a essa distância e determina qual a distância a que a letra resultante está do início do alfabeto, (ord(c)-ord(’A’)+desloc)%26
4. Soma a distância à posição da letra ’A’, ord(’A’)+(ord(c)-ord(’A’)+desloc)%26
5. A função chr, calcula qual a letra que substitui a letra original
![Page 26: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/26.jpg)
Exemplo
![Page 27: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/27.jpg)
Exemplo• À mensagem cifrada é adicionada, na última posição, a letra que define a cifra
usada
![Page 28: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/28.jpg)
Dígito de controle• Problema relevante em situações em que se lida com números muito grandes
• Número do cartão de cidadão, números de cartões de crédito, números de cheques, códigos de barras de produtos, identificadores de livros (código ISBN)
• É comum a introdução de um dígito adicional, o dígito de controle que permite detetar os erros mais comuns na introdução ou transmissão de grandes números:
1. a alteração de um único algarismo2. a troca de pares de algarismos subjacentes
• O dígito de controle é calculado de acordo com determinado algoritmo e permite verificar se o número introduzido está ou não correto
![Page 29: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/29.jpg)
Dígito de controle – cartão de cidadão
1º dígito de controle: o valor da soma
adicionado ao dígito de controle é um múltiplo de 11
02038801 2 ZZ9
1º dígito de controle
2º dígito de controle
![Page 30: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/30.jpg)
Dígito de controle – cartão de cidadão
def gera_dc_1(num_id_civil):if len(num_id_civil) != 8:
raise ValueError ('Numero incorreto')else:
soma = 0for i in range(8):
soma = soma + eval(num_id_civil[i]) * (9 - i)return 11 - soma % 11
![Page 31: Fundamentos da Programação...Cifra de substituição •Cada letra da mensagem é substituída pela letra que está um certo número de posições à sua direita no alfabeto, o deslocamento](https://reader036.vdocuments.com.br/reader036/viewer/2022071506/612755a946783c42406fdc2f/html5/thumbnails/31.jpg)