programa convierte caracteres alfanumericos a morse (python)

Iniciado por Glas.jfcc, 5 Junio 2012, 20:02 PM

0 Miembros y 1 Visitante están viendo este tema.

Glas.jfcc

hola amigos aqui les dejo un codigo que convierte caracteres alfanumericos en su respectivo codigo Morse, me parece que debo compartirlo a alguien le puede servir de algo, saludos

Código (python) [Seleccionar]
# -*- coding: cp1252 -*-
#convierte texto ingresado en pantalla a codico morse
#by Glas (glas.jfcc@gmail.com)
#----------------------------------------------------

#------------------------------------------
def morse(caracter):
    if caracter == 'a' or caracter == 'A':
        codigo = '.-'
    if caracter == 'b' or caracter == 'B':
        codigo = '-...'
    if caracter == 'c' or caracter == 'C':
        codigo = '-.-.'
    if caracter == 'd' or caracter == 'D':
        codigo = '-..'
    if caracter == 'e' or caracter == 'E':
        codigo = '.'
    if caracter == 'f' or caracter == 'F':
        codigo = '..-.'
    if caracter == 'g' or caracter == 'G':
        codigo = '--.'
    if caracter == 'h' or caracter == 'H':
        codigo = '....'
    if caracter == 'i' or caracter == 'I':
        codigo = '..'
    if caracter == 'j' or caracter == 'J':
        codigo = '.---'
    if caracter == 'k' or caracter == 'K':
        codigo = '-.-'
    if caracter == 'l' or caracter == 'L':
        codigo = '.-..'
    if caracter == 'm' or caracter == 'M':
        codigo = '--'
    if caracter == 'n' or caracter == 'N':
        codigo = '-.'
    if caracter == 'ñ' or caracter == 'Ñ':
        codigo = '--.--'
    if caracter == 'o' or caracter == 'O':
        codigo = '---'
    if caracter == 'p' or caracter == 'P':
        codigo = '.--.'
    if caracter == 'q' or caracter == 'Q':
        codigo = '--.-'
    if caracter == 'r' or caracter == 'R':
        codigo = '.-.'
    if caracter == 's' or caracter == 'S':
        codigo = '...'
    if caracter == 't' or caracter == 'T':
        codigo = '_'
    if caracter == 'u' or caracter == 'U':
        codigo = '..-'
    if caracter == 'v' or caracter == 'V':
        codigo = '...-'
    if caracter == 'w' or caracter == 'W':
        codigo = '.--'
    if caracter == 'x' or caracter == 'X':
        codigo = '-..-'
    if caracter == 'y' or caracter == 'Y':
        codigo = '-.--'
    if caracter == 'z' or caracter == 'Z':
        codigo = '--..'
    if caracter == '0':
        codigo = '-----'
    if caracter == '1':
        codigo = '.----'
    if caracter == '2':
        codigo = '..---'
    if caracter == '3':
        codigo = '...--'
    if caracter == '4':
        codigo = '....-'
    if caracter == '5':
        codigo = '.....'
    if caracter == '6':
        codigo = '-....'
    if caracter == '7':
        codigo = '--...'
    if caracter == '8':
        codigo = '---..'
    if caracter == '9':
        codigo = '----.'
    if caracter == '.':
        codigo = '.-.-.-'
    if caracter == ',':
        codigo = '--..--'
    if caracter == '?':
        codigo = '..--..'
    if caracter == '!':
        codigo = '-.-.--'
    if caracter == ' ':
        codigo = ' '
    return codigo
#------------------------------------------

print 'COVERSOR TEXTO->MORSE'
print '---------------------\n'
texto = raw_input('> ')

for letra in texto:
    print morse(letra)

raw_input()

overxfl0w13

#1
Puedes hacerlo mucho más sencillo con un diccionario, así te ahorras tanto condicional que ralentizan el programa. Si quieres practicar prueba a hacerlo así :)

Bueno es :)

Te dejo mi versión por si te decides a hacerlo, la tomes como ejemplo:

Código (python) [Seleccionar]

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class morse:
def __init__(self,texto):
self.texto = texto
self.diccionario = {"a":".-","b":"-...","c":"-.-.","d":"-..","e":".","f":"..-.","g":"--.","h":"....","i":"..","j":".---",
"k":"-.-","l":".-..","m":"--","n":"-.","ñ":"--.--","o":"---","p":".--.","q":"--.-","r":".-.","s":"...","t":"_","u":"..-",
"v":"...-","w":".--","x":"-..-","y":"-.--","z":"--..","0":"-----","1":".----","2":"..---","3":"...--","4":"....-",
"5":".....","6":"-....","7":"--...","8":"---..","9":"----.","!":"-.-.--","?":"..--..",".":".-.-.-"," ":" ","'":"--..--"}
self.parseador()
def parseador(self):
self.acumulador = ""
for self.elemento in self.texto.lower():
self.acumulador = self.acumulador + self.diccionario[self.elemento]
print self.acumulador
if __name__ == '__main__':
texto = raw_input("Inserta el texto a morsear>")
instancia = morse(texto)



Y se podría simplificar mucho más, sin usar POO:

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: utf-8 -*-
texto,acumulador,diccionario= (raw_input("Inserta el texto a morsear>"),"",{"a":".-","b":"-...","c":"-.-.","d":"-..","e":".","f":"..-.","g":"--.","h":"....","i":"..","j":".---",
"k":"-.-","l":".-..","m":"--","n":"-.","ñ":"--.--","o":"---","p":".--.","q":"--.-","r":".-.","s":"...","t":"_","u":"..-",
"v":"...-","w":".--","x":"-..-","y":"-.--","z":"--..","0":"-----","1":".----","2":"..---","3":"...--","4":"....-",
"5":".....","6":"-....","7":"--...","8":"---..","9":"----.","!":"-.-.--","?":"..--..",".":".-.-.-"," ":" ","'":"--..--"})
for letra in texto.lower():
acumulador = acumulador + diccionario[letra]
print acumulador



[/url]

Glas.jfcc

hooo :o muy bien gracias por las respuestas, sabia que se podia hacer de forma mas simple sin los IF, gracias saludos.

Jirp96

Hola!
Además de lo que comentó overxfl0w13, puedes ahorrarte todos los "or", si, en vez de esto:
Código (python) [Seleccionar]

def morse(caracter):
    if caracter == 'a' or caracter == 'A':
        codigo = '.-'
    if caracter == 'b' or caracter == 'B':
        codigo = '-...'
    if caracter == 'c' or caracter == 'C':
        codigo = '-.-.'
(...)
    if caracter == 'x' or caracter == 'X':
        codigo = '-..-'
    if caracter == 'y' or caracter == 'Y':
        codigo = '-.--'
    if caracter == 'z' or caracter == 'Z':
(...)


Usas esto:
Código (python) [Seleccionar]

def morse(caracter):
    if caracter.lower() == 'a':
        codigo = '.-'
    if caracter.lower() == 'b':
        codigo = '-...'
    if caracter.lower() == 'c':
        codigo = '-.-.'
(...)
    if caracter.lower() == 'x':
        codigo = '-..-'
    if caracter.lower() == 'y':
        codigo = '-.--'
    if caracter.lower() == 'z':
(...)


Esto es, pasando el caracter que estas comparando a minuscula y solo tomar en cuenta estas últimas ^^
Saludos!