domingo, 28 de novembro de 2010

Problema 5.27

Como podemos gerar uma chave de encriptação? Eis a nossa primeira solução:
01.import random
02. 
03.def cria_chave():
04.    """Devolve uma chave para encriptar mensagens. Constrói uma permutação."""
05.    alfabeto = 'abcdefghijklmnopqrstuvwxyz '
06.    chave = ''
07.    while alfabeto:
08.        # escolhe próximo caracter
09.        indice = random.randint(0,len(alfabeto)-1)
10.        car = alfabeto[indice]
11.        # actualiza chave
12.        chave = chave + car
13.        # actualiza alfabeto
14.        alfabeto = alfabeto.replace(car,'')
15.    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.
01.def cria_chave_2():
02.    """Devolve uma chave para encriptar mensagens. Constrói uma permutação."""
03.    alfabeto = 'abcdefghijklmnopqrstuvwxyz '
04.    chave = ''
05.    for i in range(len(alfabeto)):
06.        indice= random.randint(0,26-i)
07.        chave = chave + alfabeto[indice]
08.        alfabeto = alfabeto[:indice] + alfabeto[indice + 1:]
09.    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