Skip to content

Commit d30f970

Browse files
committed
fix(ciphers): add input validation and doctests to a1z26 encode and decode
1 parent 25bcced commit d30f970

1 file changed

Lines changed: 12 additions & 0 deletions

File tree

ciphers/a1z26.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,27 @@ def encode(plain: str) -> list[int]:
1313
"""
1414
>>> encode("myname")
1515
[13, 25, 14, 1, 13, 5]
16+
>>> encode("HELLO")
17+
Traceback (most recent call last):
18+
...
19+
ValueError: plain text must contain only lowercase letters 'a'-'z'
1620
"""
21+
if not plain or any(not ("a" <= elem <= "z") for elem in plain):
22+
raise ValueError("plain text must contain only lowercase letters 'a'-'z'")
1723
return [ord(elem) - 96 for elem in plain]
1824

1925

2026
def decode(encoded: list[int]) -> str:
2127
"""
2228
>>> decode([13, 25, 14, 1, 13, 5])
2329
'myname'
30+
>>> decode([0, 27])
31+
Traceback (most recent call last):
32+
...
33+
ValueError: encoded values must be integers between 1 and 26
2434
"""
35+
if not encoded or any(not (1 <= elem <= 26) for elem in encoded):
36+
raise ValueError("encoded values must be integers between 1 and 26")
2537
return "".join(chr(elem + 96) for elem in encoded)
2638

2739

0 commit comments

Comments
 (0)