关于Python中Caesar Cipher的Caesar Cipher问题

时间:2016-03-31 07:08:03

标签: python encryption caesar-cipher

我的解码功能正常工作,但我的编码功能一直都很好,直到最后一个字母。当解决它应该显示“uryyb”为你好,而不是它“uryyl”。这是我的代码:

def encode(w, o):

    result = ""
    w = w.lower()

    for i in w:
        letter = ord(i)
        if ord('a') <= letter <= ord('z'):
            new_letter = letter + (o % 26)
            if new_letter < 26:
                new_letter += 26
            result += chr(new_letter)

        else:
            result += chr(letter)

    return result

2 个答案:

答案 0 :(得分:0)

你在那里。您处理if (this.Frame.BackStackDepth > 1) { var distinctItems = this.Frame.BackStack.Distinct().ToList(); this.Frame.BackStack.Clear(); foreach (var item in distinctItems) { this.Frame.BackStack.Add(item); } } 但未处理if new_letter < 26

的情况

编辑:顺便说一下,查看ord(i)返回的值。您注意到26不是要检查的正确号码

答案 1 :(得分:0)

假设o是班次数。您需要确保ord介于az之间。

    # truncate overflowing
    while new_letter < ord("a"):
        new_letter += 26
    # however, case above never shows up. Why?
    while new_letter > ord("z"):
        new_letter -= 26
    result += chr(new_letter)

你会发现:

>> ord("a") # the base is not 26!
97