Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 19, 2016 02:38:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Перебор списка по смещенному индексу

Хоть он и предлагает str.translate(), но это не всегда работает. Общий способ - сделать транслятор символа.

>>> def tr(c):
...     lower = 'abcdefghijklmnopqrstuvwxyz'
...     if c in lower:
...         return lower[(lower.index(c) + 2) % len(lower)]
...     else:
...         return c
... 
>>> s = ('g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq '
...      'ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq '
...      'glcddgagclr ylb rfyr\'q ufw rfgq rcvr gq qm jmle. '
...      'sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu '
...      'ynnjw ml rfc spj.')
>>> 
>>> out = ''.join(map(tr, s))
>>> out
"i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url."
>>>



Отредактировано py.user.next (Июнь 19, 2016 02:42:39)

Офлайн

#2 Июнь 24, 2016 07:33:03

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Перебор списка по смещенному индексу

Используя стандартный модуль collections можно получить еще более компактное решение данной задачки:

from collections import deque 
from string import lowercase
_aux = deque(lowercase)
_aux.rotate(-2)  # "круговой" сдвиг алфавита на 2 буквы!!!
transform = {a:b for a, b in zip(lowercase, _aux)}
yourstring = '''g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.'''
result = ''.join(map(lambda x: transform[x] if x in transform else x, yourstring))
print result

Отредактировано scidam (Июнь 24, 2016 07:36:11)

Офлайн

#3 Июнь 24, 2016 13:44:06

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Перебор списка по смещенному индексу

Вообще, так можно, но это всё ерунда

>>> s = ('g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq '
...      'ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq '
...      'glcddgagclr ylb rfyr\'q ufw rfgq rcvr gq qm jmle. '
...      'sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu '
...      'ynnjw ml rfc spj.')
>>> 
>>> s.translate(str.maketrans('abcdefghijklmnopqrstuvwxyz',
...                           'cdefghijklmnopqrstuvwxyzab'))
"i hope you didnt translate it by hand. thats what computers are for. doing it in by hand is inefficient and that's why this text is so long. using string.maketrans() is recommended. now apply on the url."
>>>



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version