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 старайтесь не использовать одни и те же переменные. Это просто вызывает путаницу... но это вопрос для обзора кода
Предполагая, что вы все делаете правильно, это должно работать.