【发布时间】:2010-12-27 17:46:23
【问题描述】:
我想将字符串的单个字符转换为整数,将其加 2,然后将其转换回字符串。因此,A 变为 C,K 变为 M,等等。
【问题讨论】:
我想将字符串的单个字符转换为整数,将其加 2,然后将其转换回字符串。因此,A 变为 C,K 变为 M,等等。
【问题讨论】:
对于那些需要对字符串的每个字符执行操作的人,另一种处理方法是将str 对象转换为bytes 对象/从bytes 对象转换,这将利用@987654326 @object 只是一个整数序列。
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'
相关主题:
【讨论】:
“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()。那是因为我回答的问题与所问的不同。 ;)
【讨论】:
通常情况下,只需 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']
【讨论】:
这听起来很像家庭作业,所以我会给你几张,让你填写其余的。
要访问字符串 s 的单个字符,它的 s[x] 其中 x 是一个整数索引。索引从 0 开始。
要获取字符的整数值,它是 ord(c),其中 c 是字符。要将整数转换回字符,它是 chr(x)。小心接近字母表末尾的字母!
编辑:如果您对如何处理 Y 和 Z 有疑问,请发表评论,我会给出提示。
【讨论】:
http://docs.python.org/library/functions.html
ord(c)
给定一个长度为 1 的字符串,当参数是 unicode 对象时,返回一个整数,表示字符的 Unicode 代码点,或者当参数是 8 位字符串时,返回字节的值。例如,ord('a') 返回整数 97,ord(u'\u2020') 返回 8224。这是 chr() 用于 8 位字符串和 unichr() 用于 unicode 对象的倒数。如果给出了 unicode 参数并且 Python 是使用 UCS2 Unicode 构建的,那么字符的代码点必须在 [0..65535] 范围内;否则字符串长度为 2,会引发 TypeError。
【讨论】:
这是通过 chr 和 ord 函数完成的。例如; chr(ord(ch)+2) 做你想做的事。这些都被完整描述了here。
【讨论】:
试试ord(),应该可以解决问题:)
【讨论】: