sábado, 24 de outubro de 2009

Problema 4.11

Pretende-se transformar uma cadeia de caracteres no seu equivalente em Código Morse. Eis a solução.

01.def string_morse(s):
02. """ Converte uma cadeia de caracteres para Morse."""
03. d={"A":".-", "B":"-...","C":"-.-.","D":"-..","E":".",
04.    "F":"..-.","G":"--.","H":"....","I":"..","J":".---","K":"-.-","L":".-..",
05.    "M":"--","N":"-.","O":"---","P":".--.",
06.    "Q":"--.-","R":".-.","S":"...","T":"-","U":"..-",
07.    "V":"...-","W":".--","X":"-..-","Y":"-.--","Z":"--.."}
08. l= list(s.upper().replace('\n',''))
09. lf=[]
10. for char in l:
11.  lf.append(d[char])
12. sf=''.join(lf)
13. return sf


O que se pode dizer da solução? Em primeiro lugar, usamos um dicionário para estabelecer a correspondência entre cada caracter e o correspondente código (linha 3). De seguida, na linha 3, normalizamos a cadeia para maiúsculas, retiramos o caracter correspondente à mudança de linha e convertemos tudo numa lista de caracteres. O programa propriamente dito conjuga duas ideias já muito trabalhadas. A primeira, é o modo de varrer uma estrutura através de um ciclo. Neste caso, como se pretende substituir os caracteres é natural que a travessia se faça pelo conteúdo da lista e não pelos índices. A segunda, é o recurso a uma variável que funciona como acumulador, neste caso da solução, solução essa que vai sendo construída de modo progressivo em cada etapa do ciclo. É inicializada na linha 9, e actualizada na linha 11. Finalmente (linha 12), reconstruímos a cadeia de caracteres Morse.

Sem comentários:

Enviar um comentário