Python: ¿Por qué esta función de cifrado genera mis números como letras?

CorePress2024-01-25  10

He estado trabajando en este programa de cifrado, la descripción básica es que la función desplaza 2 letras hacia atrás en el alfabeto si la letra ingresada es mayúscula; de lo contrario, sube 2 en el alfabeto, pero por alguna razón, cuando ingreso un número, genera una letra. ¿Cómo hago para que solo se genere el número ingresado sin convertirlo en una letra?

def text_encrypt(plain_text):
encrypted = ''
for i in range(len(plain_text)):
    if plain_text[i] == ' ':
        encrypted = encrypted + plain_text [i] 
    elif plain_text[i].isupper():
        encrypted = encrypted + chr((ord(plain_text[i])-2-65)%26+65)
    else:
        encrypted = encrypted + chr((ord(plain_text[i])+2-97)%26+97)
return encrypted

#Testing code

text_plain = input("What would you like Encrypted?:")
plain_text = text_encrypt(text_plain)
print("Encrypted text: {}".format(plain_text))

#Sample Output: What would you like Encrypted?: One 1 
      Prints: Mpg g   #I need it to print Mpg 1 

No estás realizando ninguna verificación de los números en tu código.

-TigerhawkT3

28 de marzo de 2021 at 3:09



------------------------------------

Cambie su else a elif para detectar también caracteres en minúscula. De lo contrario, el caso predeterminado debería ser poner el personaje sin cambiar.

    if plain_text[i].isupper():
        encrypted = encrypted + chr((ord(plain_text[i])-2-65)%26+65)
    elif plain_text[i].islower():
        encrypted = encrypted + chr((ord(plain_text[i])+2-97)%26+97)
    else:
        encrypted = encrypted + plain_text [i]



------------------------------------

Se ha saltado el cifrado de espacios. De manera similar, puede omitir el cifrado de dígitos. El método isdigit() se puede utilizar para comprobar si un carácter/cadena es un dígito o no.

def text_encrypt(plain_text):
encrypted = ''
for i in range(len(plain_text)):
    if plain_text[i].isdigit() or plain_text[i] == ' ':
        encrypted = encrypted + plain_text [i] 
    elif plain_text[i].isupper():
        encrypted = encrypted + chr((ord(plain_text[i])-2-65)%26+65)
    else:
        encrypted = encrypted + chr((ord(plain_text[i])+2-97)%26+97)
return encrypted

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare