Преобразуйте строку / символ к целому числу в Python

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

14
задан as2d3 30 June 2017 в 21:30
поделиться

7 ответов

This is done through the chr and ord functions. Eg; chr(ord(ch)+2) does what you want. These are fully described here.

23
ответ дан 1 December 2019 в 06:28
поделиться

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

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

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

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

15
ответ дан 1 December 2019 в 06:28
поделиться

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

ord (c)

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

3
ответ дан 1 December 2019 в 06:28
поделиться

Normally, Just ord and add 2 and chr back, (Y, Z will give you unexpected result ("[","\")

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

If you want to change Y, Z to A, B, you could do like this.

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

Here is A to 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']
3
ответ дан 1 December 2019 в 06:28
поделиться

Try ord(), should do the trick :)

1
ответ дан 1 December 2019 в 06:28
поделиться

For a whole string this would be:

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

It's diffucult for 'Y', 'Z' ...

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

Functions: chr, ord

0
ответ дан 1 December 2019 в 06:28
поделиться

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

2
ответ дан 1 December 2019 в 06:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: