def run_cipher(encrypt=True): """Sub menu with a list of implemented ciphers.""" clear() prompt = "Choose a cipher to use:\n\n" prompt += "1) (Af)fine\n" prompt += "2) (At)bash\n" prompt += "3) (C)aesar\n" prompt += "4) (K)eyword\n\n" prompt += "Type (q) to quit.\n" user_input = input(prompt) affine_input = [1, '1', 'af'] atbash_input = [2, '2', 'at'] caesar_input = [3, '4', 'c'] keyword_cipher_input = [4, '3', 'k'] valid_input = affine_input + atbash_input + keyword_cipher_input + caesar_input if user_input.lower() == "q": return "q" while user_input not in valid_input: user_input = str(input(prompt)) def ask_for_value(): val_input = input("Enter value:\n") if not encrypt: val_input = Cipher.remove_char_blocks(val_input) return val_input text = ask_for_value() while text.lower().replace(" ", "").isalpha() is False: print("Value must contain letters only.\n") text = ask_for_value() # Affine inputs if user_input in affine_input: aff_first_number = input("Please enter a beginning number for the Affine cipher (must be odd):\n") aff_second_number = input("Please enter an ending number for the Affine cipher:\n") while aff_first_number.isnumeric() is False \ or int(aff_first_number) % 2 == 0 \ or aff_second_number.isnumeric() is False: print("Value must contain numbers. First number must be odd.\n") aff_first_number = input("Please enter a beginning number for the Affine Cipher (must be odd):\n") aff_second_number = input("Please enter an ending number for the Affine cipher:\n") cipher = Affine(aff_first_number, aff_second_number) # Atbash inputs if user_input in atbash_input: cipher = Atbash() # Keyword inputs if user_input in keyword_cipher_input: user_keyword = input("Please enter your keyword for the Keyword Cipher:\n") while text.lower().isalpha() is False: print("Value must contain letters only.\n") user_keyword = input("Please enter keyword for the Keyword Cipher:\n") cipher = Keyword(user_keyword) if user_input in caesar_input: cipher = Caesar() if encrypt: text = cipher.encrypt(text) if input("Do you want to add a secret pad? (Y/n)\n").lower() == "y": text = pad_option(text, cipher) val = cipher.char_blocks(text) else: if input("Was a secret pad used? (Y/n)\n").lower() == "y": text = pad_option(text, cipher, encrypt=False) val = cipher.decrypt(text) return val