为什么会有%26(Python)?

时间:2019-11-03 08:34:33

标签: python encryption key caesar-cipher

我试图在不知道凯撒密码中的密钥的情况下解密用户的文本。

我可能大部分都理解了,但是我不明白为什么他们在第8行使用了mod 26



alphabet=['a','b','c','d','e','f','g','h','i','j','k','l','m',
    'n','o','p','q','r','s','t','u','v','w','x','y','z']
print('write the message you want to decode?')
inputString = input()
inputString = inputString.lower()

transAlphabet = {}

def createDict(shift):
    for i in range(0,26):
        letter = alphabet[i]

        transAlphabet[letter]=alphabet[(i+shift)%26]


def encodeMessage(message):
    cypherText = ''
    for letter in message:
        if letter in transAlphabet:

            cypherText = cypherText + transAlphabet[letter]
        else:
            cypherText = cypherText + letter
    print(cypherText)

for i in range(0,26):
    createDict(i)
    encodeMessage(inputString)



如果有人帮助我,请给我很大的帮助!

1 个答案:

答案 0 :(得分:1)

%26的模为z时,使字母变成圆形。

带有aalph[(i + shift) % 26]的{​​{1}}的示例

  • 没有模,您希望到达数组中的索引i=20,并且它不存在
  • 使用模,您将到达数组中的索引shift=10,字母30

但是您的算法也很奇怪,我本来可以为每辆车进行即时换档,但是您的解决方案对于长文本而言可能更有效,因为您不需要每次都计算换档。

之前不计算移位后的字母会像这样

30%26 = 4