Как ROT13 кодировать в Python3?
Документация по Python 3 содержит рот13, указанный на странице кодеков.
Я попытался кодировать строку с использованием кодировки rot13:
import codecs
s = "hello"
os = codecs.encode( s, "rot13" )
print(os)
Это дает unknown encoding: rot13
ошибка. Есть ли другой способ использовать встроенную кодировку rot13? Если эта кодировка была удалена в Python 3 (как показывают результаты поиска Google), почему она все еще указана в документации Python3?
5 ответов
Ага! Я думал, что он был удален из Python 3, но нет - просто изменился интерфейс, потому что кодек должен возвращать байты (а это str-to-str).
Это из http://www.wefearchange.org/2012/01/python-3-porting-fun-redux.html:
import codecs
s = "hello"
enc = codecs.getencoder( "rot-13" )
os = enc( s )[0]
В Python 3.2+ есть rot_13
кодек str-to-str:
import codecs
print(codecs.encode("hello", "rot-13")) # -> uryyb
rot_13
был удален в Python 3.0, а затем добавлен обратно в v3.2.
rot13
был добавлен еще в v3.4.
codecs.encode( s, "rot13" )
отлично работает в Python 3.4+
Собственно, теперь вы можете использовать любой знак препинания между
rot
а также
13
сейчас, в том числе:
rot-13
,
rot@13
,
rot#13
, так далее.
https://docs.python.org/3/library/codecs.html#text-transforms
Новое в версии 3.2: Восстановление текстового преобразования rot_13.
Изменено в версии 3.4: Восстановление псевдонима rot13.
def rot13(message):
Rot13=''
alphabit = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in message:
if i in alphabit:
Rot13 += alphabit[alphabit.index(i) + 13]
else:
Rot13 += i
return Rot13
Код очень большой, но я только учусь
Для начала вам нужно установить библиотеку Python - https://pypi.org/project/endecrypt/
pip установить endecrypt (windows)
pip3 установить endecrypt (linux)
тогда,
from endecrypt import cipher
message_to_encode = "Hello World"
conversion = 'rot13conversion'
cipher.encode(message_to_encode, conversion )
# Uryyb Jbeyq
message_to_decode = "Uryyb Jbeyq"
cipher.decode(message_to_decode, conversion)
# Hello World