Char使用python转移到左侧

时间:2015-06-05 08:07:46

标签: python python-2.7

我是python的新手。 我想通过它的位置转移char。例如。

pos = 3然后用z代替c,用y代替c,用x代替,像C一样用C代替,用Y代替B,用X代替A

我试过了什么? 我尝试使用硬编码值,

for i in s:
     if ord(i) == 99:
          return z
     if ord(i) == 98:
          return x
     ...
     ...

是否有可用的内置功能?或任何其他更简单的方法来实现这一目标?

修改

如果字符串为"abcdef" 输出将为"xyzabc"

我是用户输入"AbCdEf",然后输出为"XyZaBc"

4 个答案:

答案 0 :(得分:3)

您可以将On Error Resume Next Set fso = CreateObject("Scripting.FileSystemObject") 'make a new folder to delete Set f = fso.CreateFolder("c:\New Folder") 'wait 30 secs to you can see it in explorer wscript.sleep 30000 'Checking size Set fldr = fso.GetFolder("c:\new folder") Msgbox fldr.size If fldr.size > 100000000000 then msgbox "too large" fldr.delete ord结合使用:

chr

答案 1 :(得分:1)

根据您的要求,我了解您需要演示Substitution Cipher。实现起来非常简单。我会给你功能概要伪代码:

char substitutionCipher(int leftRotateBy, char alphabet) {
    int pos = (int) alphabet - (int) 'a';
    pos -= leftRotateBy;
    if(pos < 0) {
       pos += 26;
    }
    return (char) (pos + (int) 'a');
}

请注意,此大纲仅适用于小写字母。您也可以将其修改为适用于大写字母。谢谢!

答案 2 :(得分:0)

如果您正在使用Python 2并且想要转换整个句子,请考虑制作字符转换表。 https://docs.python.org/2/library/string.html#string.maketrans

import string

def caesar_shift(secret, shift):
    lcase = string.ascii_lowercase
    ucase = string.ascii_uppercase
    shift = shift % len(lcase) # force shift to be between 0 and 25, inclusive
    trans = string.maketrans(
        ''.join([lcase,ucase]),
        ''.join([lcase[shift:], lcase[shift:],
                  ucase[shift:], ucase[:shift]]))
    return string.translate(secret, trans)

请记住,在Python 3中不推荐使用string.maketrans和string.translate作为改进Python的Unicode字符串处理的一部分。

使用负值或正值向左/向右移动。 https://en.wikipedia.org/wiki/Caesar_cipher

答案 3 :(得分:-1)

import string

def convert(c, pos):
        charset = string.lowercase
        index = charset.find(c)
        if index >= 0:
                return charset[(index - pos) % len(charset)]

        charset = string.uppercase
        index = charset.find(c)
        if index >= 0:
                return charset[(index - pos) % len(charset)]

        return c

assert convert("c", 3) == "z"
assert convert("b", 3) == "y"
assert convert("a", 3) == "x"
assert convert("C", 3) == "Z"
assert convert("B", 3) == "Y"
assert convert("A", 3) == "X"

对那些对提高绩效感兴趣的人的更新:

import string

def get_converter(pos):
        def rot(s, pos):
                offset = -pos % len(s)
                return s[offset:] + s[:offset]
        def getzip(charset, pos):
                return zip(charset, rot(charset, pos))
        def getdict(pos):
                return dict(getzip(string.ascii_lowercase, pos) + getzip(string.ascii_uppercase, pos))
        chardict = getdict(pos)
        def converter(c):
                return chardict.get(c, c)
        return converter

convert = get_converter(3)

assert convert("c") == "z"
assert convert("b") == "y"
assert convert("a") == "x"
assert convert("C") == "Z"
assert convert("B") == "Y"
assert convert("A") == "X"
assert convert("!") == "!"