Преобразование строки / символа в целое число в python
Я хочу преобразовать один символ строки в целое число, добавить к нему 2, а затем преобразовать его обратно в строку. Следовательно, A становится C,K становится M и т. д.
7 ответов
это делается с помощью функций chr и ord. Например,chr(ord(ch)+2)
делает то, что вы хотите. Они полностью описаны здесь.
Это очень похоже на домашнюю работу, поэтому я дам вам пару кусочков, а остальное вы заполните.
для доступа к одному символу строки s, его s[x], где x-целочисленный индекс. Индексы начинаются с 0.
чтобы получить целочисленное значение символа, это ord (c), где c-символ. Чтобы вернуть целое число символу, это chr (x). Будьте осторожны с буквами, близкими к концу алфавита!
Edit: если у вас возникли проблемы с тем, что чтобы сделать для Y и Z, оставьте комментарий и я дам подсказку.
http://docs.python.org/library/functions.html
ord (c)
учитывая строку длины один, верните целое число, представляющее кодовую точку Unicode символа, когда аргумент является объектом unicode, или значение байта, когда аргумент является 8-битной строкой. Например, ord ('a') возвращает целое число 97, ord (u'\u2020') возвращает 8224. Это инверсия chr() для 8-разрядных строк и unichr () для объектов unicode. Если аргумент unicode дано и Python был построен с UCS2 Unicode, тогда кодовая точка символа должна быть в диапазоне [0..65535] включительно; в противном случае длина строки равна двум, и будет поднят TypeError.
обычно, просто 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']
" 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 (). Это потому, что я отвечаю на другой вопрос, чем был задан вопрос. ;)
для целой строки это будет:
>>> s = "Anne"
>>> ''.join([chr(ord(i)+2) for i in s])
'Cppg'
это трудно для "Y", "Z"...
>>> s = "Zappa"
>>> ''.join([chr(ord(i)+2) for i in s])
'\crrc'