Update ciphers/caesar_cipher.py with type hints (#3860)

* Update caesar_cipher.py

improved for conciseness and readability

* Add type hints

Co-authored-by: Dhruv Manilawala <dhruvmanila@gmail.com>
This commit is contained in:
Abdeldjaouad Nusayr Medakene 2020-12-10 18:25:57 +01:00 committed by GitHub
parent 75759fae22
commit 110a740d5d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,7 +1,8 @@
from string import ascii_letters from string import ascii_letters
from typing import Dict, Optional
def encrypt(input_string: str, key: int, alphabet=None) -> str: def encrypt(input_string: str, key: int, alphabet: Optional[str] = None) -> str:
""" """
encrypt encrypt
======= =======
@ -79,7 +80,7 @@ def encrypt(input_string: str, key: int, alphabet=None) -> str:
return result return result
def decrypt(input_string: str, key: int, alphabet=None) -> str: def decrypt(input_string: str, key: int, alphabet: Optional[str] = None) -> str:
""" """
decrypt decrypt
======= =======
@ -144,7 +145,7 @@ def decrypt(input_string: str, key: int, alphabet=None) -> str:
return encrypt(input_string, key, alphabet) return encrypt(input_string, key, alphabet)
def brute_force(input_string: str, alphabet=None) -> dict: def brute_force(input_string: str, alphabet: Optional[str] = None) -> Dict[int, str]:
""" """
brute_force brute_force
=========== ===========
@ -193,31 +194,18 @@ def brute_force(input_string: str, alphabet=None) -> dict:
# Set default alphabet to lower and upper case english chars # Set default alphabet to lower and upper case english chars
alpha = alphabet or ascii_letters alpha = alphabet or ascii_letters
# The key during testing (will increase)
key = 1
# The encoded result
result = ""
# To store data on all the combinations # To store data on all the combinations
brute_force_data = {} brute_force_data = {}
# Cycle through each combination # Cycle through each combination
while key <= len(alpha): for key in range(1, len(alpha) + 1):
# Decrypt the message # Decrypt the message and store the result in the data
result = decrypt(input_string, key, alpha) brute_force_data[key] = decrypt(input_string, key, alpha)
# Update the data
brute_force_data[key] = result
# Reset result and increase the key
result = ""
key += 1
return brute_force_data return brute_force_data
def main(): if __name__ == "__main__":
while True: while True:
print(f'\n{"-" * 10}\n Menu\n{"-" * 10}') print(f'\n{"-" * 10}\n Menu\n{"-" * 10}')
print(*["1.Encrypt", "2.Decrypt", "3.BruteForce", "4.Quit"], sep="\n") print(*["1.Encrypt", "2.Decrypt", "3.BruteForce", "4.Quit"], sep="\n")
@ -248,7 +236,3 @@ def main():
elif choice == "4": elif choice == "4":
print("Goodbye.") print("Goodbye.")
break break
if __name__ == "__main__":
main()