Python - 将字符串中的字符增加 1
Python - Increment Characters in a String by 1
我在 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
有办法吗?
您可以使用带有 ''.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)
方法将其递增 1。然后它使用 ''.join()
将生成器中的字母转换回字符串。
由于 gtllambert 击败了我的原始答案,我发布了一个替代解决方案。您还可以使用 map
和 lambda 表达式来实现相同的目的。 lambda 表达式使用 chr
和 ord
将每个字符递增 1,并使用 chr
将其转换回字符。
value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
非常简单的四行代码:
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)
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
的挑战
我在 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
有办法吗?
您可以使用带有 ''.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)
方法将其递增 1。然后它使用 ''.join()
将生成器中的字母转换回字符串。
由于 gtllambert 击败了我的原始答案,我发布了一个替代解决方案。您还可以使用 map
和 lambda 表达式来实现相同的目的。 lambda 表达式使用 chr
和 ord
将每个字符递增 1,并使用 chr
将其转换回字符。
value = 'abc'
''.join(map(lambda x:chr(ord(x)+1),value))
非常简单的四行代码:
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)
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
的挑战