在Python中打印字母表

在Python中打印字母表,python,string,Python,String,如何编写python程序,在输出中输入一些字母并输出(字母+n)。范例 my_string = 'abc' expected_output = 'cde' # n=2 我想到的一种方法是使用str.maketrans,将原始输入映射到(字母+n)。还有别的办法吗 PS:xyz应该翻译成abc 我也试着为这个问题编写自己的代码(除了提到的无限好的答案): 关于如何不转换特殊字符有何评论?谢谢像这样的东西怎么样 >>> my_string = "abc" >>>

如何编写python程序,在输出中输入一些字母并输出(字母+n)。范例

my_string = 'abc'
expected_output = 'cde' # n=2
我想到的一种方法是使用
str.maketrans
,将原始输入映射到(字母+n)。还有别的办法吗

PS:xyz应该翻译成abc

我也试着为这个问题编写自己的代码(除了提到的无限好的答案):


关于如何转换特殊字符有何评论?谢谢

像这样的东西怎么样

>>> my_string = "abc"
>>> n = 2
>>> "".join([ chr(ord(i) + n) for i in my_string])
'cde'
>>> from string import ascii_lowercase
>>> lower = ascii_lowercase
>>> input = "xyz"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'zab'
>>> input = "abc"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'cde'
注意如评论中所述,当遇到边缘情况如
xyz


编辑要处理边缘案例,可以编写如下内容

>>> my_string = "abc"
>>> n = 2
>>> "".join([ chr(ord(i) + n) for i in my_string])
'cde'
>>> from string import ascii_lowercase
>>> lower = ascii_lowercase
>>> input = "xyz"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'zab'
>>> input = "abc"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'cde'

像这样的怎么样

>>> my_string = "abc"
>>> n = 2
>>> "".join([ chr(ord(i) + n) for i in my_string])
'cde'
>>> from string import ascii_lowercase
>>> lower = ascii_lowercase
>>> input = "xyz"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'zab'
>>> input = "abc"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'cde'
注意如评论中所述,当遇到边缘情况如
xyz


编辑要处理边缘案例,可以编写如下内容

>>> my_string = "abc"
>>> n = 2
>>> "".join([ chr(ord(i) + n) for i in my_string])
'cde'
>>> from string import ascii_lowercase
>>> lower = ascii_lowercase
>>> input = "xyz"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'zab'
>>> input = "abc"
>>> "".join([ lower[(lower.index(i)+2)%26] for i in input ])
'cde'

如果你不在乎包装,你可以:

def shiftString(string, number):
    return "".join(map(lambda x: chr(ord(x)+number),string))
如果您确实希望环绕(想想Caesar chiffre),则需要指定字母表开始和结束的位置的开始和结束:

def shiftString(string, number, start=97, num_of_symbols=26):
    return "".join(map(lambda x: chr(((ord(x)+number-start) %
           num_of_symbols)+start) if start <= ord(x) <= start+num_of_symbols
           else x,string))
def shiftString(字符串、数字、开始=97、符号数=26):
返回“”。连接(映射(lambda x:chr)((ord(x)+数字开始)%

num_of_symbols)+start)如果开始如果您不关心环绕,您可以执行以下操作:

def shiftString(string, number):
    return "".join(map(lambda x: chr(ord(x)+number),string))
如果您确实希望环绕(想想Caesar chiffre),则需要指定字母表开始和结束的位置的开始和结束:

def shiftString(string, number, start=97, num_of_symbols=26):
    return "".join(map(lambda x: chr(((ord(x)+number-start) %
           num_of_symbols)+start) if start <= ord(x) <= start+num_of_symbols
           else x,string))
def shiftString(字符串、数字、开始=97、符号数=26):
返回“”。连接(映射(lambda x:chr)((ord(x)+数字开始)%

num_of_symbols)+start)如果start我对代码做了以下更改:

number = 2
prim =  """Special() ops() chars!!"""
final = prim.lower()
for x in final:
    if(x =="y"):
        print("a", end="")
    elif(x=="z"):
        print("b", end="")
    elif (ord(x) in range(97, 124)):
        conv = ord(x)
        x = conv+number
        print(chr(x),end="")
    else:
        print(x, end="")

**Output**: urgekcn() qru() ejctu!!

我对代码做了以下更改:

number = 2
prim =  """Special() ops() chars!!"""
final = prim.lower()
for x in final:
    if(x =="y"):
        print("a", end="")
    elif(x=="z"):
        print("b", end="")
    elif (ord(x) in range(97, 124)):
        conv = ord(x)
        x = conv+number
        print(chr(x),end="")
    else:
        print(x, end="")

**Output**: urgekcn() qru() ejctu!!


你的字母表是什么?小写ASCII字母?你想让它环绕吗?是的,小写字母,但这不是我可以使用的问题。小写/大写。我想打印由n推进的输入字母表。不确定“你想让它环绕吗?”
z
shift=2应该输出什么?所有字符都是有效的ascii吗?你想让y和z分别变成a和b吗?是的,xyz,应该转换成abc。这就是问题。你的字母表是什么?小写ascii字母?你想让它环绕吗?是的,小写字母表,但这不是我可以使用的问题。小写/大写。我想要to打印由n推进的输入字母表。不确定您所说的“您希望它环绕吗?”
z
shift=2应该输出什么?所有字符都是有效的ascii码吗?你想让y和z分别变成a和b吗?是的,xyz应该转换成abc。这就是
xyz
的问题所在?@BhargavRao实际上,它不会t@inspectorG4dgetOp没有规定转换应该是循环的。如果需要的话这不会work@vaultah是的。忘了这个例子不一样。我的错!无论如何,OP应该将变量名从
input
更改为其他名称,因为
input
是内置的func@inspectorG4dget使用列表的不整洁解决方案。我不确定pythonic的方法:/xyz发生了什么事?@BhargavRao实际上,它不会t@inspectorG4dgetOp没有规定转换应该是循环的。如果这是必需的,那么就不需要了work@vaultah是的。忘了这个例子不一样。我的错!无论如何,OP应该将变量名从
input
更改为其他名称,因为
input
是内置的func@inspectorG4dget使用list.Am的不整洁解决方案不确定使用Python的方法:对于这个解决方案,它也有一种处理空白空间的方法。它现在用“p”替换空格。正如我所说的,你不想替换这个范围之外的任何东西。但是给我一个第二个DOK,现在应该只考虑小写字母(默认情况下)。对于这个解决方案,它也有一种处理空白空间的方法。它现在用“p”替换空格。正如我所说的,你不想替换这个范围之外的任何东西。但是给我一个第二步,现在只考虑小写字母(默认情况下)。