11

我已经搜索了如何在 python 中执行此操作,但找不到答案。如果你有一个字符串:

>>> value = 'abc' 

如何将字符串中的所有字符加 1?所以我正在寻找的输入是:

>>> value = 'bcd' 

我知道我可以使用 ord 和 chr 对一个字符进行操作:

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

但是ord()并且chr()只能取一个字符。如果我将上面的相同语句用于一个以上字符的字符串。我会得到错误:

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

有没有办法做到这一点?

4

4 回答 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'

生成器迭代letter字符串中的每个,并使用您问题中建议value的方法将其递增一。chr(ord(letter)+1)然后它将''.join()生成器中的字母转换回字符串。

于 2016-03-05T22:26:49.777 回答
8

由于 gtllambert 击败了我的原始答案,我发布了一个替代解决方案。您也可以使用map和 lambda 表达式来实现相同的目的。lambda 表达式使用chrandord将每个字符加一,chr并将其​​转换回字符。

value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
于 2016-03-05T22:32:14.250 回答
1

非常简单的四行代码:

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

它遍历字符串中的每个字母并向其添加一个,但这不适用于“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)
于 2016-03-05T23:18:20.183 回答
1
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 的挑战

于 2016-09-06T00:09:35.770 回答