当我输入"abc"
时,我想将"bcd"
作为输出。
所以我希望A
B
和B
为C
,依此类推Z
A
。
那么我该如何做到这一点我没有丝毫的线索。
答案 0 :(得分:18)
您可以使用translate
直接将字母更改为其他字母:
try:
from string import makestrans
except ImportError:
maketrans = str.maketrans
from string import ascii_lowercase
#old = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
#new = 'bcdefghijklmnopqrstuvwxyzaBCDEFGHIJKLMNOPQRSTUVWXYZA'
offset = 1
old_lower = ascii_lowercase
new_lower = old_lower[offset:] + old_lower[:offset]
old = old_lower + old_lower.upper()
new = new_lower + new_lower.upper()
# Create a translate table.
trans = maketrans(old, new)
# Translate your string using trans
print("abc".translate(trans))
# bcd
答案 1 :(得分:5)
您可以使用ord
函数获取角色的代码点,然后将其递增1,将其转换回具有chr
函数的角色。最后,使用str.join
函数加入所有字符,就像这样
data = "abc"
print("".join(chr(ord(char) + 1) for char in data))
# bcd
z
的特殊情况可以像这样处理
print("".join(chr(ord(char) + 1) if char != 'z' else 'a' for char in data))
答案 2 :(得分:3)
使用reduce:
astr = "abc"
print reduce(lambda r,x:r+chr(ord(x)+1),astr,"")
输出:
bcd
编辑:
对于角落案例:
print reduce(lambda r,x:r+chr(ord(x)+1) if x != 'z' else r+'a',astr,"")
答案 3 :(得分:0)
编辑:以下代码仅适用于Python 2,在Python 3中,模块名为str
,print
是函数。
使用maketrans
。以下是仅用于字母a-z,而不是A-Z,作为练习:
import string
lowercase_to = string.ascii_lowercase[1:] + string.ascii_lowercase[:1] # bcdefg...xyza
translation = string.maketrans(string.ascii_lowercase, lowercase_to)
s = "abc"
print s.translate(translation) # Prints "bcd"
答案 4 :(得分:0)
您可以使用python中的ord
函数获取角色的代码点,然后使用chr
将代码点转换回char。对于ASCII字符,字母的代码点是按字母顺序连续和顺序的,例如ord('a') + 1 == ord('b')
等等。所以你可以做这样的事情(为了清楚起见,我们用长形式编写,但它可以很容易地缩短列表理解):
newstring = ""
for c in "abc":
codepoint = ord(c)
next_codepoint = codepoint + 1
newstring += chr(codepoint)
这是基本情况,但您可能还需要处理从'z'
到'a'
的包装。如果char超出有效范围,您可能需要进行一些错误处理。你可以这样做:
newstring = ""
for c in "abc":
if c == 'z':
newstring += 'a'
elif c == 'Z':
newstring += 'A'
else:
codepoint = ord(c)
if (ord('a') <= codepoint <= ord('z')) or (ord('A') <= codepoint <= ord('Z')):
next_codepoint = codepoint + 1
newstring += chr(codepoint)
else:
raise ValueError("Character %r is outside of the valid range." % c)