-
-
Notifications
You must be signed in to change notification settings - Fork 99
/
Copy pathcaesar.py
44 lines (34 loc) · 1.29 KB
/
caesar.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
from string import ascii_letters
def encrypt(input_string: str, key: int, alphabet: str | None = None) -> str:
"""
Mengkodekan string yang diberikan dengan sandi caesar
dan mengembalikan kode yang disandikan pesan
>>> alphabet = 'abcdefghijklmnopqrstuvwxyz'
>>> encrypt('situasi pantai aman', 5, alphabet)
'xnyzfxn ufsyfn frfs'
"""
alpha = alphabet or ascii_letters
result = ""
for character in input_string:
if character not in alpha:
# Tambahkan tanpa enkripsi jika karakter tidak ada dalam alfabet
result += character
else:
# Dapatkan indeks kunci baru dan pastikan tidak terlalu besar
new_key = (alpha.index(character) + key) % len(alpha)
# tambahkan enskripsi karakter ke dalam alfabet
result += alpha[new_key]
return result
def decrypt(input_string: str, key: int, alphabet: str | None = None) -> str:
"""
Mendekode string teks sandi yang diberikan
dan mengembalikan teks biasa yang didekodekan
>>> alphabet = 'abcdefghijklmnopqrstuvwxyz'
>>> decrypt('xnyzfxn ufsyfn frfs', 5, alphabet)
'situasi pantai aman'
"""
key *= -1
return encrypt(input_string, key, alphabet)
if __name__ == "__main__":
import doctest
doctest.testmod()