Python - 将字符串中的字符逐个加1

13

我很久以前就找过如何在Python中做到这一点,但是我找不到答案。如果你有一个字符串:

>>> value = 'abc' 

如何将字符串中的所有字符都增加1?所需输入示例:

>>> value = 'bcd' 

我知道可以使用 ord 和 chr 只用一个字符实现它:

>>> value = 'a'
>>> print (chr(ord(value)+1)) 
>>> b

但是 ord()chr() 只能接受一个字符。如果我使用一个包含多个字符的字符串来执行上述语句,我将会收到以下错误:

但是 ord()chr() 只能接受一个字符。如果我使用一个包含多个字符的字符串来执行上述语句,我将会收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 3 found 

有没有一种方法可以做到这一点?


我简直不敢相信没有人使用递归想出了这个问题的解决方案。 - Alexander Cherednichenko
@Alexander Cherednichenko,您会如何使用递归来解决这个问题? - Guacaka283
4个回答

13

你可以使用生成器表达式和 ''.join(),如下所示:

In [153]: value = 'abc'

In [154]: value_altered = ''.join(chr(ord(letter)+1) for letter in value)

In [155]: value_altered
Out[155]: 'bcd'
生成器遍历字符串value中的每个letter,并使用在您的问题中建议的chr(ord(letter)+1)方法将其增加一。 然后,它使用''.join()将生成器中的字母转换回字符串。

1
一个生成器表达式在这里可能更自然,因为你实际上并不需要列表。只需在 join 调用内部去掉方括号:"".join(chr(ord(letter)+1) for letter in value) - Blckknght
谢谢@Blckknght,我已经相应地更新了我的答案。 - gtlambert

8

由于 gtllambert 已经给出了我原本的答案,所以我将提供一种替代方案。您也可以使用 map 和一个 lambda 表达式来实现相同的效果。Lambda 表达式使用 chrord 将每个字符增加一,并使用 chr 将其转换回字符。

value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))

3
value = 'abc'
newVar=(chr(ord(value[0])+1))
newVar1=(chr(ord(value[1])+1))
newVar2=(chr(ord(value[2])+1))
value=newVar+newVar1+newVar2
print(value)

我想分享一下我的经验,使用Python 3编写的代码居然奏效了!感谢这个挑战!


2
你应该使用for循环。 - xilpex

1
非常简单的四行代码:

finalMessage=""
for x in range (0,len(value)):
    finalMessage+=(chr(ord(value[x])+1))
print(finalMessage)

它遍历字符串中的每个字母并将其加1,但对于“z”无效,因此可以这样做:
value="abc testing testing, or sdrshmf"
finalMessage=""
for x in range(0,len(value)):
    if ord(value[x]) in range(97,123):
        finalMessage+=(chr(((ord(value[x])-96)%26)+97))
    elif ord(value[x]) in range(65,91):
        finalMessage+=(chr(((ord(value[x])-64)%26)+65))
    else:
        finalMessage+=value[x]
print(finalMessage)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接