YOKARAMANE
@YOKARAMANE

Как увеличить допустимое число вводимых знаков?

def encrypt(msg, key):
    encrypted=""
    for letter in msg:
        position = alphabet.find(letter)
        newPosition = position + key
        if letter in alphabet:
            encrypted = encrypted + alphabet [newPosition]
        else:
            encrypted = encrypted + letter
    return encrypted

@bot.message_handler(commands = ['encrypt'])
def msg_encrypt(message):
    error = 'Вы не указали параметры шифрования!\nПример: /encrypt РУДН 5'
    arg = get_arg(message.text)
    if len(arg) >= 2:
        try:
            key = int(arg[-1])
            bot.send_message(message.chat.id, f"{encrypt(ltstr(arg[0:-1]), key)}")
        except ValueError:
            bot.send_message(message.chat.id, error, parse_mode = 'Markdown')
    else:
        bot.send_message(message.chat.id, error, parse_mode = 'Markdown')


При вводе текста 'Привет, хабр, это тестовый текст' c шагом '5' возникает ошибка 'string index out of range'. Более короткие предложения проходят нормально. Как фиксить?
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
@antares4045
Возможно это не финал решения, но из нашего общения в коментариях я вынес предположение, что строка у вас хранится в виде

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

дальше суть проблемы:
position =alphabet.find('я') # 31
newPosition = position + key # 36
alphabet [newPosition] # ааааа! нет такой буквы

предпологаю, что вы хотели забацать шифр соломона, в котором при переходе через край счёт начинается заново

position =s.find('я') # 31
newPosition = (position + key) % len(alphabet) # 4
alphabet [newPosition] # д


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

А из-за чего сдвиг шифра неправильный без понятия: скиньте ка свой алфавит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы