我想把字符串中的一个字符转换成整数,加上2后再转回字符串。 因此,A变为C,K变为M等。
>>> chr(ord("A")+2)
'C'
>>> 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']
http://docs.python.org/library/functions.html
ord(c)
如果给定的字符串长度为1,则返回一个整数,该整数表示当参数是unicode对象时字符的Unicode代码点,或者当参数是8位字符串时该字节的值。例如,ord('a')返回整数97,ord(u'\u2020')返回8224。这相当于8位字符串的chr()和unicode对象的unichr()的反函数。如果给定了一个unicode参数并且Python使用UCS2 Unicode构建,则该字符的代码点必须在[0..65535]范围内,否则字符串长度为2,将引发TypeError异常。
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()
函数,应该可以解决问题 :)
str
对象转换为/从 bytes
对象进行处理,这将利用 bytes
对象只是整数序列的事实。import numpy
old_text_str = "abcde" # Original text
old_num_list = list(old_text_str.encode()) # Integer values of the original text
new_num_list = numpy.add(old_num_list, 2).tolist() # Add +2 to the integer values
new_text_str = bytes(new_num_list).decode() # Updated text
print(f"{old_text_str=}")
print(f"{old_num_list=}")
print(f"{new_num_list=}")
print(f"{new_text_str=}")
输出:
old_text_str='abcde'
old_num_list=[97, 98, 99, 100, 101]
new_num_list=[99, 100, 101, 102, 103]
new_text_str='cdefg'
相关主题: