如何在Python中解字符串

0 投票
2 回答
7010 浏览
提问于 2025-04-17 23:55

我正在尝试制作一个文本加密程序,这个程序会把文本中的字母换成一种不同顺序的字母表。不过,我想用 a = key[1] 来表示这个字母表(key 是重新排列后的字母表的名字),但这样做不行,因为 key[1] 不能直接赋值给一个字母。有没有什么办法可以解决这个问题呢?

2 个回答

0

所以,key 是你重新排列的字母表,而 ALPHA 是正常的字母表。

ALPHA = 'abcdefghijklmnopqrstuvwxyz'
key = 'zwlsqpugxackmirnhfdvbjoeyt'
msg = 'secretmessage'
code = []

for i in msg:
    code.append(key[ALPHA.index(i)])

print(''.join(code))

在编码后再生成字符串,而不是在编码过程中生成。

0

在Python和很多其他编程语言中,字符串是不可变的,这是有原因的

所以你需要做的是创建一个新的字符串,按需替换里面的字符。

对于字节字符串(在Python中就是普通的字节数组),可以使用.translate。这个方法需要一个256字节的字符串,来描述如何替换每一个可能的字节。

对于Unicode字符串,.translate使用一个映射,这样会稍微方便一些,但可能还是有点麻烦:

unicode('foo bar').translate({ord('f'): u'F', ord('b'): u'B'})

一般情况下,像这样的代码应该可以工作:

def transform_char(char):
  # shift a characte 3 positions forward
  return chr(ord(char) + 3)

def transform(source_string):
  return ''.join(transform_char(c) for c in source_string)

transform里发生了什么呢?它生成了一个被转换字符的列表([transform_char(c) for c in source_string]),这个叫做“列表推导式”。这个列表里包含了每个字符在source_string中对应的转换字符。然后,这个列表中的所有元素会被高效地用join方法连接起来,中间用一个空字符串''隔开。

希望这些信息对你现在来说足够了。

撰写回答