31
Fundamentos da Programação Capítulo 4: Tuplos e ciclos contados (ciclos contados e cadeias de caracteres revisitadas)

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

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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