我正在尝试创建一个程序,该程序生成对任何局外人来说看起来都是胡言乱语的编码消息。
我希望它允许使用任何旋转量对邮件进行加密。因此,用户将能够在终端中键入消息并指定旋转量(13、4、600等),程序将打印出结果加密的消息。
最终的交互式程序将按以下方式运行:
$ python caesar.py 输入消息: 你好,世界! 旋转方式: 5 Mjqqt,Btwqi!
我使用一些帮助程序功能将问题分解为可管理的步骤。
我尝试编写一个名为Alphabet_position(letter)的函数,该函数接收一个字母(一个只有一个字母字符的字符串),并返回该字母在字母中从0开始的数字位置,将0的值分配给a和A,1到b和B,对于z和Z一直到25。
然后,我编写了另一个函数rotate_character(char,rot),该函数接收一个字符char(长度为1的字符串)和一个整数rot。该函数应返回一个新的长度为1的字符串,该字符串是将char按右边的位数腐烂的结果。如果旋转角度大于25,则应使用上方的Alphabet_position函数并回绕到字母的开头。
然后,我编写了又一个名为crypto(text,rot)的函数,该函数接收字符串和整数的输入。第二个参数rot指定旋转量。该函数应返回将文本中每个字母向右旋转的结果。
终端中的结果应如下所示:
$ python caesar.py 输入消息: 你好,世界! 旋转方式: 5 Mjqqt,Btwqi!
对于这的最后一部分,我想创建一个Vigenere密码。
Vigenere使用一个单词作为加密密钥,而不是一个整数。完成的程序将如下所示:
$ python vigenere.py 输入消息: 乌鸦在午夜飞! 加密密钥: 繁荣 Uvs osck rmwse bh auebwsih!
如果您可以提供有关我对这段代码所做的不正确操作的任何信息,我们将不胜感激。
def encrypt(text,rot):
text_new = ""
for pos in range(len(text)):
text_new += rotate_character(text[pos],int(rot))
return text_new
def alphabet_position(letter):
alphabet_pos = {'A':0, 'a':0, 'B':1, 'b':1, 'C':2, 'c':2,
'D':3, 'd':3, 'E':4, 'e':4, 'F':5, 'f':5, 'G':6, 'g':6, 'H':7,
'h':7, 'I':8, 'i':8, 'J':9, 'j':9, 'K':10, 'k':10, 'L':11, 'l':11,
'M':12, 'm':12, 'N':13, 'n':13, 'O':14, 'o':14, 'P':15, 'p':15,
'Q':16, 'q':16, 'R':17, 'r':17, 'S':18, 's':18, 'T':19, 't':19,
'U':20, 'u':20, 'V':21, 'v':21, 'W':22, 'w':22, 'X':23, 'x':23,
'Y':24, 'y':24, 'Z':25, 'z':25}
pos = alphabet_pos[letter]
return alphabet_position(letter)
def rotate_character(char,rot):
x = (alphabet_position(char))
y = (x + rot)%26
if (ord(char) >= 97) and (ord(char) <= 122): # lowercase
return x.lower
elif (ord(char) >= 65) and (ord(char) <=90): # uppercase
return x.upper
else:
return char
char = input('Enter a character:')
rot = input('Enter a number to rotate by:')
print(rotate_character(char,rot))
def main():
text = input("Type a message")
print("text")
rot = input("Rotate by:")
if __name__ == "__main__":
main()
终端没有返回加密消息的预期结果,而是返回了以下消息: 第10行,在Alphabet_position 返回Alphabet_position(字母) [上一行重复987次以上] RecursionError:超过了最大递归深度
答案 0 :(得分:0)
您的alphabet_position
函数的返回行使用传递的相同参数进行调用。您可能打算返回alphabet_pos[letter]
(或更优的是pos
)而不是返回alphabet_position(letter)
。