我已经用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();
}
答案 0 :(得分:2)
您可以使用字符串的直接列表转换,然后使用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
答案 1 :(得分:1)
我建议使用一个字符列表,即
>>> x = ['a', 'b', 'c']
>>> x
['a', 'b', 'c']
>>> x.append('d')
>>> x += ['e', 'f']
>>> x
['a', 'b', 'c', 'd', 'e', 'f']
>>> "".join(x)
'abcdef'