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