ROT 13 Cipher: создание функции Python

Мне нужно создать функцию, которая заменяет букву буквой 13 букв после нее в алфавите (без использования кодирования). Я относительно новичок в Python, поэтому мне потребовалось некоторое время, чтобы найти способ сделать это без использования Encode.

Вот что у меня так далеко. Когда я использую это для ввода обычного слова, такого как "привет", это работает, но если я прохожу предложение со специальными символами, я не могу понять, как ПРОСТО включить буквы алфавита и пропустить цифры, пробелы или специальные символы полностью.

def rot13(b):
    b = b.lower()
    a = [chr(i) for i in range(ord('a'),ord('z')+1)]
    c = []
    d = []
    x = a[0:13]
    for i in b:
        c.append(a.index(i))
    for i in c:
        if i <= 13:
            d.append(a[i::13][1])
        elif i > 13:
            y = len(a[i:])
            z = len(x)- y
            d.append(a[z::13][0])
    e = ''.join(d)
    return e

РЕДАКТИРОВАТЬ

Я пытался использовать.isalpha(), но, похоже, это не работает для меня - символы почему-то дублируются, когда я его использую. Правильный ли следующий формат:

def rot13(b):
    b1 = b.lower()
    a = [chr(i) for i in range(ord('a'),ord('z')+1)]
    c = []
    d = []
    x = a[0:13]
    for i in b1:
        if i.isalpha():
            c.append(a.index(i))
            for i in c:
                if i <= 12:
                    d.append(a[i::13][1])
                elif i > 12:
                    y = len(a[i:])
                    z = len(x)- y
                    d.append(a[z::13][0])
        else:
            d.append(i)
    if message[0].istitle() == True:
        d[0] = d[0].upper()
    e = ''.join(d)
    return e

1 ответ

Решение

Исходя из комментариев. OP посоветовали использовать isalpha, и интересно, почему это вызывает дублирование (см. Редактирование OP)

Это не связано с использованием isalpha, это связано со вторым для цикла

for i in c:

не является необходимым, и вызывает дублирование. Вы должны удалить это. Вместо этого вы можете сделать то же самое, просто используя index = a.index(i), Вы уже делали это, но по какой-то причине вместо этого добавляете в список и вызываете путаницу

Использовать index переменная в любое время вы бы использовали i внутри for i in c петля. На заметку: во вложенных циклах for старайтесь не использовать одни и те же переменные. Это просто вызывает путаницу... но это вопрос для обзора кода

Предполагая, что вы все делаете правильно, это должно работать.

Другие вопросы по тегам