我正在尝试创建一个程序,它可以生成一个对任何外人来说都是胡言乱语的编码消息。在
我希望它允许使用任何旋转量来加密消息。因此,用户可以在终端中输入一条消息,并指定一个旋转量(13、4、600等),程序将打印得到的加密消息。在
最终的交互式程序将如下运行:
$python凯撒.py
键入消息:
你好,世界!
旋转方式:
5
Mjqqt,顺便说一句!在
我使用一些helper函数来帮助将问题分解为可管理的步骤。在
我尝试过编写一个名为alphabet_position(letter)的函数,它接收一个字母(一个只有一个字母字符的字符串),并返回字母表中该字母从0开始的数字位置,将0赋值给a和a,1分配给b和b,z和z的值一直到25
然后我编写了另一个函数rotate_character(char,rot),它接收一个字符char(长度为1的字符串)和一个整数rot。该函数应该返回一个长度为1的新字符串,这是按rot的位数向右旋转char的结果。它应该使用上面的alphabet_position函数,如果旋转大于25,则返回到字母表的开头。在
然后,我又编写了一个名为encrypt(text,rot)的函数,它接收字符串和整数的输入。第二个参数rot指定旋转量。函数应该返回文本中每个字母向右旋转的结果。在
终端中的结果应该如下所示:
$python凯撒.py
键入消息:
你好,世界!
旋转方式:
5
Mjqqt,顺便说一句!在
我要为这个密码的最后一部分做准备。在
Vigenere使用单词作为加密密钥,而不是整数。完成的程序将如下所示:
$python维格纳.py
键入消息:
乌鸦半夜飞!
加密密钥:
繁荣
这是我的生日!在
如果您能提供任何信息,我做了什么错误的代码,我将不胜感激。在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行,字母位置
返回字母位置(字母)
[上一行重复987次]
递归错误:超过最大递归深度