Как исправить ошибку 'индекс строки вне диапазона' в функции, которая шифрует строку - PullRequest
0 голосов
/ 29 мая 2019

Я не знаю, как эффективно вернуться к началу алфавита, когда (индекс буквы + 13) находится вне диапазона

Я написал функцию, которая работает, только если (индекс буквы + 13) находится в диапазоне.

def rot13(message):
    letters = [i for i in message]
    for i in letters:
        if i.isupper():
            letters[letters.index(i)] = 
string.ascii_uppercase[string.ascii_uppercase.index(i) + 13]
        elif i.islower():
            letters[letters.index(i)] = 
string.ascii_lowercase[string.ascii_lowercase.index(i) + 13]
        else:
            continue
    return ''.join(letters)

Когда я звоню, например, rot13 («Тест»), конечно, я получаю ошибку «индекс строки вне диапазона», как мне решить эту проблему?

1 Ответ

0 голосов
/ 29 мая 2019

Используйте оператор по модулю %:

Модуль делит число на заданный коэффициент и сохраняет остаток, например:

27 % 26 = 1

В вашем случае это будут две строки:

string.ascii_uppercase[(string.ascii_uppercase.index(i) + 13) % 26]

string.ascii_lowercase[(string.ascii_uppercase.index(i) + 13) % 26]
...