我正在制作一个为了好玩而打乱单词的程序,但我遇到了障碍。我正在尝试切换字符串中的所有字母,但我不太确定如何去做(hello = ifmmp)。我环顾四周,无法找到这个特定问题的任何答案。任何帮助都会很棒!
问问题
1430 次
4 回答
0
您似乎追求的“加扰”称为凯撒密码,右移 1。以下 Python 将实现您所追求的:
def caesar(str):
from string import maketrans
fromalpha = "abcdefghijklmnopqrstuvwxyz"
# Move the last 1 chars to the start of the string
toalpha = fromalpha[1:] + fromalpha[:1]
# Make it work with capital letters
fromalpha += fromalpha.upper()
toalpha += toalpha.upper()
x = maketrans(fromalpha, toalpha)
return str.translate(x)
如果您对一般情况感兴趣,此功能将完成这项工作。(请注意,通常用左移而不是右移来表示凯撒密码。)
def caesar(str, lshift):
from string import maketrans
fromalpha = "abcdefghijklmnopqrstuvwxyz"
toalpha = fromalpha[-lshift:] + fromalpha[:-lshift]
fromalpha += fromalpha.upper()
toalpha += toalpha.upper()
x = maketrans(fromalpha, toalpha)
return str.translate(x)
于 2013-10-30T02:39:59.217 回答
0
你想要一个简单的随机密码吗?以下内容适用于所有小写输入,并且可以轻松扩展。
import random
import string
swapped = list(string.lowercase)
random.shuffle(swapped)
cipher = string.maketrans(string.lowercase, ''.join(swapped))
def change(val):
return string.translate(val, cipher)
于 2013-10-29T23:26:23.317 回答
0
您可能可以修改此示例以实现您所需要的。这里字符串中的每个元音都被它的元音位置替换:
from string import maketrans # Required to call maketrans function.
intab = "aeiou"
outtab = "12345"
trantab = maketrans(intab, outtab)
str = "this is string example....wow!!!";
print str.translate(trantab);
# this is the output
"th3s 3s str3ng 2x1mpl2....w4w!!!"
于 2013-10-29T23:26:28.247 回答
0
尝试将 maketrans 与 string.translate 函数结合使用。此代码会从您首先使用的字母中删除单词中的字母。如果您只想使用小写字母,请使用 string.lowercase 而不是 string.letters。
>>> import string, random
>>> letters = list(string.letters)
>>> random.shuffle(letters)
>>> letters = "".join(letters)
>>> word = 'hello'
>>> for letter in word:
... letters = letters.replace(letter, '')
...
>>> transtab = string.maketrans(word, letters[:len(word)])
>>> print word.translate(transtab)
XQEEN
于 2013-10-29T23:50:14.420 回答