凯撒密码的Python字符串连接,与Java代码相当



我已经用Java完成了Caesar密码的加密代码,我的计划是使用相同的逻辑在Python中重写程序。虽然可以通过多种方式完成,但我有什么方法可以使用与 Python 中的 StringBuilder 等效的东西吗?如果我在 Python 中有一个存储字符串值的 hold 变量,那么我如何以类似于下面 Java 中的方式附加新字符或字符串?

    static String encrypt(String s, int shift)
    {
        shift = shift % 26 + 26;
        StringBuilder hold = new StringBuilder();
        for (char i : s.toCharArray()) 
        {
            if (Character.isLetter(i)) 
            {
                if (Character.isUpperCase(i))
                    hold.append((char)('A' + (i - 'A' + shift) % 26 ));
                else
                    hold.append((char)('a' + (i - 'a' + shift) % 26 ));
            } 
            else
                hold.append(i);
        }
        return hold.toString();
    }

您可以使用字符串的直接列表转换,然后使用 ord()/chr() 函数来弄乱单个字符的 ASCII 值。

字符串是不可变的,但列表不可变。 你可以在 Python 中很好地连接字符串,字符串可以通过列表转换和使用 split() 和 join() 重新转换来更改。

Python 字符串还有给出布尔值的 isupper()、islower()、isdigit() 和 isalpha() 方法。

我现在无法对此进行测试,因为我不完全理解您的密码,但我认为它接近于复制您的 JAVA 代码。 您可能希望稍微调整密码位。

def encrypt(encryptString, shift):
    shift = shift % 26 + 26
    stringList = list(encryptString)
    for eachCharacter in stringList:
        if eachCharacter.isalpha() == True:
            if eachCharacter.isupper() == True:
                eachCharacter = chr( ( ord('A') + ord(eachCharacter) - ord('A') + shift) % 26)
            else:
                eachCharacter = chr( ( ord('a') + ord(eachCharacter) - ord('a') + shift) % 26)
    encryptString = ''.join(stringList)
    return encryptString

我建议使用字符列表,即

>>> x = ['a', 'b', 'c']
>>> x
['a', 'b', 'c']
>>> x.append('d')
>>> x += ['e', 'f']
>>> x
['a', 'b', 'c', 'd', 'e', 'f']
>>> "".join(x)
'abcdef'

最新更新