domingo, 28 de novembro de 2010

Problema 5.27

Como podemos gerar uma chave de encriptação? Eis a nossa primeira solução:

import random

def cria_chave():
"""Devolve uma chave para encriptar mensagens. Constrói uma permutação."""
alfabeto = 'abcdefghijklmnopqrstuvwxyz '
chave = ''
while alfabeto:
# escolhe próximo caracter
indice = random.randint(0,len(alfabeto)-1)
car = alfabeto[indice]
# actualiza chave
chave = chave + car
# actualiza alfabeto
alfabeto = alfabeto.replace(car,'')
return chave


Consegue perceber a ideia? É fácil. Escolhemos ao acaso uma letra do alfabeto e adicionamos à nossa permutação. Retiramos de seguida a letra do alfabeto. Repetimos o processo até esgotarmos as letras. Notar que usamos um espaço em branco!

Outra forma de fazer, agora com um ciclo for.

def cria_chave_2():
"""Devolve uma chave para encriptar mensagens. Constrói uma permutação."""
alfabeto = 'abcdefghijklmnopqrstuvwxyz '
chave = ''
for i in range(len(alfabeto)):
indice= random.randint(0,26-i)
chave = chave + alfabeto[indice]
alfabeto = alfabeto[:indice] + alfabeto[indice + 1:]
return chave

Analise as diferenças. Qual das duas versões é a sua preferida, e porquê?

2 comentários:

  1. Senhor professor, desde já peço desculpa por estar a dar esta entrada neste tópico mas como este é um meio também usado pelos meus colegas para consulta penso que pode ser apropriada a minha duvida. Ao realizar os exercicios da ficha 9 deparei me com os exercicios relativos à implementacao de TDA, mais precisamente pilhas. O professor faz lá referencia a determinadas funcoes desse tipo de dados que eu no entanto não consigo aceder no meu interpretador de python. Resolvi os exercicios tendo em conta que pilhas são listas com a propriedade de o primeiro a entrar é o ultimo a sair e como tal, retirava sempre o elemento que se encontrava na posicao mais recente. Existe alguma biblioteca que seja necessária instalar que contenha as classes de TDA?

    ResponderEliminar
  2. A ideia é precisamente ser você a implementar essas funções. Para tal tem que escolher uma representação para objectos do "tipo" pilha.Listas são naturalmente um forte candidato.

    ResponderEliminar