Здравствуйте, я думаю, что у меня есть готовая программа, она должна принять зашифрованное сообщение от пользователя и расшифровать его, используя разные гнили, но если я пытаюсь запустить программу, я получаю сообщение об ошибке и не вижу проблемы, поэтому я, возможно,пара свежих глаз может заметить это, вот код:
import sys
import string
method = sys.argv[1]
plaintext = sys.argv[2]
# Define the character sets for each method.
ROT_5_charset = "0123456789"
ROT_5_charset_length = len(ROT_5_charset)
ROT_47_charset = "!\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
ROT_47_charset_length = len(ROT_47_charset)
ROT_13_charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ROT_13_charset_length = len(ROT_13_charset)
if (method == "rot5"):
charset = ROT_5_charset
rotation = 5
charset_length = ROT_5_charset_length
elif (method == "rot47"):
charset = ROT_47_charset
rotation = 47
charset_length = ROT_47_charset_length
elif (method == "rot13"):
charset = ROT_13_charset
rotation = 13
charset_length = ROT_13_charset_length
def decode_char(char):
cur_index = charset.find(char)
# If the character to be decoded does not exist in the charset, then return it as it is.
if (cur_index < 0):
return char
# Find the decoded character and return it,
new_index = ( cur_index - rotation ) % charset_length
return charset[new_index]
# ROT 13 has a separate method because it has the charset for both upper case and lower case alphabets.
# # Convert the character to uppercase, decode it, and convert it back to lowercase if required.
def decode_char_rot_13(char):
is_upper = char.isupper()
cur_index = charset.find(char.upper())
if (cur_index < 0):
return char
new_index = ( cur_index - rotation ) % charset_length
decoded = charset[new_index]
return decoded.upper() if is_upper else decoded.lower()
if (method == "rot13"):
decoded = map(lambda char: decode_char_rot_13(char), list(plaintext))
else:
decoded = map(lambda char: decode_char(char), list(plaintext))
# convert the mapp object back to a list and join them into a string
print("".join(list(decoded)))