这是我的ceasar密码,但第22行是错误的。找不到字符串

时间:2015-12-07 18:32:32

标签: python

这是我正在制作的Caesar密码。我在使用' substrings'时遇到了一些麻烦。错误代码表示第22行没有找到子字符串,我也不知道如何修复它。请帮忙。

    alphabet = 'abcdefghijklmnopqrstuvwxyz'
    La = len(alphabet)
    message = input("Insert your message: ")
    key = int(input("Insert your key: "))
    cipher = ''

    for A in message:
        if A in alphabet:
            cipher += alphabet[(alphabet.index(A)+key)%La]
        else:
            print ("Error")
    print(cipher)

    cipher2 = ''

    question = input("Do you wish to decrypt?: ")

    if question == "Y" or "y":
        for A in message:
            if A in alphabet:
                print(cipher.index(A))
                cipher2 += cipher[(cipher.index(A)+key)%La]
            else:
                print ("Error")
        print(cipher)
    else:
        print("Thank you")

1 个答案:

答案 0 :(得分:2)

程序中有很多错误。当前的问题是你的第二个循环遍历原始消息,而不是密码。将第19行更改为:

for A in cipher:

当您尝试解密单个字母时,这将使您转到下一个错误,索引超出范围。

这不是推测性调试的地方。我建议您在自己的级别找到自己的调试教程,也许使用搜索短语"如何调试我的程序?"

对于初学者来说,当您遇到执行错误时,您无法理解,解构问题陈述并且问患者疼痛的位置。"例如您的原始代码

for A in message:
    if A in alphabet:
        print(cipher.index(A))

......变成......

for A in message:
    print "CHECKPOINT 1", message, A
    if A in alphabet:
        print "CHECKPOINT 2", cipher
        A_pos = cipher.index(A)
        print "CHECKPOINT 3", A_pos
        print(cipher.index(A))

尝试使用您的解密声明:

        decode_pos = A_pos + key
        print "CHECKPOINT 4", decode_pos
        decode_pos %= La
        print "CHECKPOINT 5", decode_pos, len(cipher)
        clear_char = cipher[decode_pos]
        print "CHECKPOINT 6", clear_char
        cipher2 += clear_char
        print "CHECKPOINT 7", cipher2

这会让你感动吗?它很苛刻,但很有效。