Uma maneira de pensar a solução remete para o padrão ciclo-acumulador: usamos uma variável onde vai sendo acumulado o texto codificado, sendo que o processo de acumulação é guiado por um ciclo em que cada caractere do texto original é analisado sequencialmente.
1.
def
codifica(texto_normal,chave):
2.
"""Codifica um texto pelo método de substituição. A chave é a distância
3.
para codificar. Exemplo: 'a' passa a 'c' se chave for 2."""
4.
texto_enc
=
''
5.
for
car
in
texto_normal:
6.
texto_enc
=
texto_enc
+
substitui(car,chave)
7.
return
texto_enc
1.
def
substitui(car,chave):
2.
return
‘a’
1.
def
substitui(car,chave):
2.
return
chr(ord(car)
+
chave)
1.
def
descodifica(texto_normal,chave):
2.
"""Descodifica um texto pelo método de substituição. A codificação foi feita de acordo
3.
com a seguinte estratégia. A chave é a distância
4.
para codificar. Exemplo: 'a' passa a 'c' se chave for 2."""
5.
texto_enc
=
''
6.
for
car
in
texto_normal:
7.
texto_enc
=
texto_enc
+
substitui(car,
-
chave)
8.
return
texto_enc
Esta solução é um pouco limitada e supõe que o alfabeto é infinito à esquerda e à direita. Com efeito, se tivermos um caractere que tem o código de valor máximo (ou mínimo) qual vai ser o seu substituto. Por outro lado, existem códigos que não correspondem a letras, mas antes a sinais ou caracteres de controlo. Que fazer? Em baixo apresentamos uma solução para estas questões. Passa por definir explicitamente o alfabeto, e usar o método de procura do índice de um caractere numa cadeia (alfabeto). Por outro lado, para codificar os caracteres nos extremos do alfabeto, usamos a aritmética módulo tamanho do alfabeto (operação %). Na prática, isto corresponde a termos os caracteres organizados de forma circular.
01.
def
codifica(texto_normal,chave):
02.
"""Codifica um texto pelo método de substituição. A chave é a distância
03.
para codificar. Exemplo: 'a' passa a 'c' se chave for 2. Supõe que
04.
os caracteres são as 26 letras (minúsculas) do alfabeto e o branco."""
05.
alfabeto
=
'abcdefghijklmnopqrstuvwxyz '
06.
texto_encriptado
=
''
07.
for
car
in
texto_normal:
08.
novo_codigo
=
(alfabeto.index(car)
+
chave)
%
len(alfabeto)
09.
novo_car
=
alfabeto[novo_codigo]
10.
texto_encriptado
=
texto_encriptado
+
novo_car
11.
return
texto_encriptado
Sem comentários:
Enviar um comentário