0

我正在制作一个为了好玩而打乱单词的程序,但我遇到了障碍。我正在尝试切换字符串中的所有字母,但我不太确定如何去做(hello = ifmmp)。我环顾四周,无法找到这个特定问题的任何答案。任何帮助都会很棒!

4

4 回答 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 回答