problema con símbolos en python

editado marzo 2017 en Programación

Hola, les presento un problema que e tenido con un pequeño programa de criptografía que estoy creando, verán, el programa en teoría utiliza el cifrado cesar basándose en el código ascii, en vez de el abecedario. Este programa funcionaba bastante bien hasta que no se porque a la hora de cifrar un archivo con el método que e nombrado antes, no lo cifra basándose en el código ascii, y al introducir el contenido del archivo ya encriptado, introduce este tipo de códigos: +,

elif pregunta == "3":
    archi = raw_input("Introduzca el nombre del archivo a encriptar: ")
    nombre = raw_input("Introduzca el nombre del fichero con el codigo encriptado: ")   
    os.system("touch "+nombre+".txt")
    abrir = open(archi , "r+")
    n = abrir.read()
    por = raw_input("""1) Metodo Cesar 
2) A la inversa
>""")
    if por == "1":
        codigo = raw_input("Introduce la clave: ")
        for letra in n:
            a  = chr(ord(letra) + int(codigo))
            if ord(a) > 95:     
                a = chr(ord(letra) + int(codigo) - 95)      
                fuera2 += str(a)
            fuera2 += str(a)
        print fuera2

Espero que me puedan ayudar y gracias por adelantado.

Etiquetado:

Comentarios

  • Me gustaría hacer unas cuantas observaciones a su código, quizá corrigiendo eso pueda tener mejores resultados:

    • Me llama mucho la atención que haga un touchal archivo de salida, es para reservar el nombre? no deja de ser algo un poco "sucio", si evita la llamada del sistema quizá el código le sea más portable.
    • Usted está limitando el diccionario a los primeros 95 caracteres de la tabla ASCII, lo que le puede ocasionar inconsistencias al existir la posibilidad de que hayan entradas por fuera de ese rango, tal y como lo maneja usted, no está validando este problema.
    • Parece que está olvidando que es posible que la codificación del texto tenga caracteres especiales como aquellos con tildes y diéresis, eso le puede ocasionar inconsistencias del tipo mencionado en el punto 2.
    • En cuanto a la sustitución de caracteres en un rango definido le recuerdo que existe el operador módulo, que en python se expresaría así: a = chr ((ord (letra) + int (codigo)) % 95), de esta manera se ahorraría líneas de código.
    • Por último, señalar que la salida de la función chr no necesita ser pasada por str para concatenar.
Accede o Regístrate para comentar.