如何通过将其替换为字母表中的字母k位置来对邮件中的每个字母进行编码?例如,如果k = 3,则“a”替换为“d”,“b”替换为“e”,依此类推。字母表包裹着。 “w”由“z”代替,“x”由“a”代替,“y”由“b”代替,“z”由“c”代替。您可以假设要编码的消息不为空,只包含小写字母和空格。空间被编码为空间。 这是我尝试过的,但它并不像它需要的那样工作。我需要输入一定数量的字母才能跳过。
def encode(string,keyletter):
alpha="abcdefghijklmnopqrstuvwxyz"
secret = ""
for letter in string:
index = alpha.find(letter)
secret = secret+keyletter[index]
print secret
答案 0 :(得分:0)
您可以使用Python的maketrans
功能生成合适的字符映射,如下所示:
import string
def encode(text, rotate_by):
s_from = string.ascii_lowercase
s_to = string.ascii_lowercase[rotate_by:] + \
string.ascii_lowercase[:rotate_by]
cypher_table = string.maketrans(s_from, s_to)
return text.translate(cypher_table)
text = raw_input("Enter the text to encode: ").lower()
rotate_by = int(raw_input("Rotate by: "))
print encode(text, rotate_by)
这会显示:
Enter the text to encode: hello world
Rotate by: 3
khoor zruog
答案 1 :(得分:0)
这是一个简单的版本,不需要重新排列alpha字符串。请注意,这并不考虑用户输入错误,例如输入单词而不是旋转数字。
while 1:
rot = int(raw_input("Enter Rotation: "))
cipher = raw_input("Enter String: ")
secret,alpha = '', 'abcdefghijklmnopqrstuvwxyz'
for i in cipher.lower(): #Loop through the original string
if i not in alpha: #If the character in the original string is not in the alphabet just add it to the secret word
secret += i
else:
x = alpha.index(i) #Get index of letter in alphabet
x = (x+rot)%26 #Find the index of the rotated letter
secret += alpha[x] #Add the new letter to the secret word
print f
你可以将for循环中的所有内容压缩到一行,但是这样看起来不那么漂亮
f += i if i not in s else s[(s.index(i)+rot)%26]
如果你想使用你的Caesar Cipher,那就找一个带钥匙的Caesar Cipher并添加该选项。这将需要操纵你的alpha字符串。