IndexError: индекс списка вне диапазона - PullRequest
0 голосов
/ 04 ноября 2019

Здравствуйте, я думаю, что у меня есть готовая программа, она должна принять зашифрованное сообщение от пользователя и расшифровать его, используя разные гнили, но если я пытаюсь запустить программу, я получаю сообщение об ошибке и не вижу проблемы, поэтому я, возможно,пара свежих глаз может заметить это, вот код:

                 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...