Skip to content

Commit 5772dc5

Browse files
committed
#24 - Python
1 parent 3a802cf commit 5772dc5

File tree

1 file changed

+52
-0
lines changed
  • Retos/Reto #24 - CIFRADO CÉSAR [Fácil]/python

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
"""
2+
Crea un programa que realize el cifrado César de un texto y lo imprima.
3+
También debe ser capaz de descifrarlo cuando así se lo indiquemos.
4+
5+
Te recomiendo que busques información para conocer en profundidad cómo
6+
realizar el cifrado. Esto también forma parte del reto.
7+
"""
8+
9+
def cesar_cipher(
10+
text: str, shift: int, decipher: bool = False
11+
) -> str:
12+
"""
13+
Aplica el cifrado o descifrado César a un texto.
14+
15+
Parámetros:
16+
text (str): Texto a procesar.
17+
shift (int): Número de posiciones a desplazar en el alfabeto.
18+
decipher (bool): Si es True, se aplica el descifrado (desplazamiento inverso).
19+
20+
Retorna:
21+
str: Texto resultante tras aplicar el cifrado o descifrado.
22+
23+
Lanza:
24+
TypeError: Si el valor de `text` no es una cadena.
25+
"""
26+
27+
if not isinstance(text, str):
28+
raise TypeError("Error. Solo se acepta texto como valor.")
29+
30+
result = ""
31+
32+
if decipher:
33+
shift *= -1
34+
35+
for char in text:
36+
if char.isalpha():
37+
point_code = ord(char)
38+
if "A" <= char <= "Z":
39+
base = ord("A")
40+
elif "a" <= char <= "z":
41+
base = ord("a")
42+
new_point_code = ((point_code - base) + shift) % 26 + base
43+
result += chr(new_point_code)
44+
else:
45+
result += char
46+
47+
return result
48+
49+
50+
if __name__ == "__main__":
51+
print(cesar_cipher("Hola Mundo Yz XA", 2))
52+
print(cesar_cipher("Jqnc Owpfq Ab ZC", 2, decipher=True))

0 commit comments

Comments
 (0)