Преобразование строки/символа в целое число в python

Я хочу преобразовать один символ строки в целое число, добавить 2 к нему и затем преобразовать его обратно в строку. Следовательно, A становится C, K становится M и т.д.

Ответ 1

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

Ответ 2

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

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

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

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

Ответ 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 будет поднят.

Ответ 4

Обычно, просто 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'

Здесь от A до Z

>>> [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']

Ответ 5

Попробуйте ord(), выполните трюк:)

Ответ 6

"ord" является лишь частью решения. Пазл, который вы упомянули, вращается, так что "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(). Это потому, что я отвечаю на другой вопрос, чем на то, что было задано.;)

Ответ 7

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

>>> 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