2009-12-17 2 views

ответ

20

Это делается через Chr и Ord функций. Например; chr(ord(ch)+2) делает то, что вы хотите. Они полностью описаны here.

1

Попробуйте ord(), следует сделать трюк :)

3

http://docs.python.org/library/functions.html

Ord (с)

Учитывая строка длины одной, возвращают целое число, представляющее код точки Unicode символа, когда аргумент является Юникода объекта, или значение байта когда это аргумент представляет собой 8-битную строку. Например, ord ('a') возвращает целое число 97, ord (u '\ u2020') возвращает 8224. Это инверсия chr() для 8-битных строк и unichr() для объектов unicode. Если задан аргумент unicode и Python был создан с Unicode UCS2, то кодовая точка символа должна быть в диапазоне [0..65535] включительно; в противном случае длина строки равна двум, а TypeError будет поднята.

13

Это звучит как домашнее задание, поэтому я дам вам пару штук и позволю вам заполнить остальные.

Чтобы получить доступ к одному символу строки s, его s [x], где x - целочисленный индекс. Индексы начинаются с 0.

Чтобы получить целочисленное значение символа, это ord (c), где c - символ. Чтобы отбросить целое число к символу, это chr (x). Будьте осторожны с буквами, расположенными ближе к концу алфавита!

Редактировать: если у вас возникли проблемы с тем, что нужно делать для Y и Z, оставьте комментарий, и я дам подсказку.

+1

+1 за хорошее домашнее задание без сдачи решения – Kena

+0

Да, я боялся, что кто-то подумает, что это домашняя работа. У меня уже есть B.S. в области компьютерных наук, и я программист ASP.NET. Но я собирал Django и хотел улучшить свои навыки Python с помощью этого сайта: http://www.pythonchallenge.com/pc/def/map.html. В любом случае, я думаю, что «ord» - это функция, которую я искал; Я сделаю это после работы. Спасибо за вклад каждого! – Luke

+1

А, ок. Мои два цента на то, чтобы сделать материал не похожим на домашнюю работу, если вы так склонны: отправляйте часть проблемы, на которую вы хотите ответить (например, «как преобразовать символ в int в python», а не полный вопрос, который я на самом деле помню как один из первых вопросов в моем классе криптографии в школе), а также, я думаю, просто говорю: «Это может звучать как домашнее задание, но это не так» заставит всех нас удалить снисхождение от наших ответов :) Это выглядит но я должен проверить это. – danben

3

Обычно Просто Ord и добавьте 2 и CHR назад, (Y, Z даст вам неожиданный результат ("[", "\")

>>> chr(ord("A")+2) 
'C' 

Если вы хотите изменить Y, Z на A , B, вы могли бы сделать, как это

>>> chr((ord("A")-0x41+2)%26+0x41) 
'C' 
>>> chr((ord("Y")-0x41+2)%26+0x41) 
'A' 
>>> chr((ord("Z")-0x41+2)%26+0x41) 
'B' 

Вот от А до Я

>>> [chr((i-0x41+2)%26+0x41) for i in range(0x41,0x41+26)] 
['C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'A', 'B'] 
0

для всей строки это будет:.

>>> s = "Anne" 
>>> ''.join([chr(ord(i)+2) for i in s]) 
'Cppg' 

Это diffucult для 'Y', 'Z' ...

>>> s = "Zappa" 
>>> ''.join([chr(ord(i)+2) for i in s]) 
'\\crrc' 

Функции: chr, ord

+0

Это сломается для Zs, нет? – danben

+0

'' .join ([chr (ord (i) +2) для i в s]) сделал бы то же самое – Nikwin

+0

да и его короче. – miku

1

"ога" является лишь частью решения. Пазл, который вы упомянули, вращается, так что «X» +3 поворачивается на «A». Самым известным из них является rot-13, который вращает 13 символов. Применять rot-13 дважды (вращая 26 символов) возвращает текст обратно к себе.

Самый простой способ справиться с этим - это таблица переводов.

import string 

def rotate(letters, n): 
    return letters[n:] + letters[:n] 

from_letters = string.ascii_lowercase + string.ascii_uppercase 
to_letters = rotate(string.ascii_lowercase, 2) + rotate(string.ascii_uppercase, 2) 

translation_table = string.maketrans(from_letters, to_letters) 

message = "g fmnc wms bgblr" 
print message.translate(translation_table) 

Здесь нет ни одного ord() или chr().Это потому, что я отвечаю на другой вопрос, чем на вопрос. ;)

+0

@dalke уже знает это, но для тех, кто этого не делает, еще более простой способ сделать выше для rot-13 - это message.decode ('rot13'). (Вышеуказано rot-n.) –