具有先决条件功能的凯撒密码

时间:2017-06-14 19:10:10

标签: python caesar-cipher

我正在关注python的在线课程,我们正在研究caesar密码。我已经在本网站上看到了很多关于这个主题的问题,但是有些问题需要注意以前使用过的函数,例如在我的代码中。当我用多个输入测试它们时,前两个函数工作正常,但是当我添加最后一个函数,加密时,我得到一个未找到子字符串的值错误。我迷失在最后一部分应该做的事情上。有没有人会有建议让我朝着正确的方向努力?

def alphabet_position(letter):
    alphabet ="abcdefghijklmnopqrstuvwxyz" #Lists alphabet for a key
    lower_letter = letter.lower()   #Makes any input lowercase.
    return alphabet.index(lower_letter) #Returns the position of input as a number.

def rotate_character(char, rot):
    alphabet = "abcdefghijklmnopqrstuvwxyz"
    if char.isalpha():
        a = alphabet_position(char) 
        a = (a + rot) % 26            #needs modulo
        a = (alphabet[a])
        if char.isupper():
            a = a.title()
        return a
    else:
       return char

def encrypt(text, rot):
    list1 = ""
    for char in text:
        list1 += rotate_character(text, rot)
    return list1

def main():
    x = input("Type a message: ")
    y = int(input("Rotate by: "))
    #result = rotate_character(x, y)  #Not needed once encrypt function works.
    result = encrypt(x, y)
    print (result)

if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

您希望单独旋转每个单个字符,但是您要将完整文本传递给旋转功能。

改为使用:

def encrypt(text, rot):
    list1 = ""
    for char in text:
        list1 += rotate_character(char, rot) # "char", not "text"
    return list1