Python函数,该函数将显示Caesar密码字典

Python函数,该函数将显示Caesar密码字典,python,Python,我正在编写一个函数,它将以这种格式打印Caesar cipher的字典,其中的参数是我们希望字母移位的程度: buildCoder(3) {'A': 'D', 'C': 'F', 'B': 'E', 'E': 'H', 'D': 'G', 'G': 'J', 'F': 'I', 'I': 'L', 'H': 'K', 'K': 'N', 'J': 'M', 'M': 'P', 'L': 'O', 'O': 'R', 'N': 'Q', 'Q': 'T', 'P': 'S', 'S': 'V',

我正在编写一个函数,它将以这种格式打印Caesar cipher的字典,其中的参数是我们希望字母移位的程度:

buildCoder(3)
{'A': 'D', 'C': 'F', 'B': 'E', 'E': 'H', 'D': 'G', 'G': 'J', 'F': 'I', 'I': 'L', 'H': 'K', 'K': 'N', 'J': 'M', 'M': 'P', 'L': 'O', 'O': 'R', 'N': 'Q', 'Q': 'T', 'P': 'S', 'S': 'V', 'R': 'U', 'U': 'X', 'T': 'W', 'W': 'Z', 'V': 'Y', 'Y': 'B', 'X': 'A', 'Z': 'C', 'a': 'd', 'c': 'f', 'b': 'e', 'e': 'h', 'd': 'g', 'g': 'j', 'f': 'i', 'i': 'l', 'h': 'k', 'k': 'n', 'j': 'm', 'm': 'p', 'l': 'o', 'o': 'r', 'n': 'q', 'q': 't', 'p': 's', 's': 'v', 'r': 'u', 'u': 'x', 't': 'w', 'w': 'z', 'v': 'y', 'y': 'b', 'x': 'a', 'z': 'c'}
这是我的密码:

import string
def buildCoder(shift):
    small = string.ascii_lowercase
    capital = string.ascii_uppercase
    mainDict = {}
    for i in range(0, len(capital)):
        mainDict[capital[i]] = capital[i+shift]
    for i in range(0, len(small)):
        mainDict[capital[i]] = capital[i+shift]
    return mainDict

但问题是,当它遍历大写变量中的字母时,该变量的字符串索引超出范围。我能做些什么来解决它呢?

问题是,在某个点上,
I+shift
大于
len(小)
len(大写)
,您需要使用:

输出

{'B': 'E', 'w': 'z', 'e': 'h', 's': 'v', 'C': 'F', 'K': 'N', 'Z': 'C', 'v': 'y', 'I': 'L', 'r': 'u', 'S': 'V', 'R': 'U', 'X': 'A', 'l': 'o', 'N': 'Q', 'J': 'M', 'b': 'e', 'i': 'l', 'E': 'H', 'G': 'J', 'x': 'a', 'L': 'O', 'h': 'k', 'c': 'f', 'm': 'p', 'u': 'x', 'H': 'K', 'd': 'g', 'U': 'X', 'Y': 'B', 'F': 'I', 't': 'w', 'z': 'c', 'M': 'P', 'V': 'Y', 'p': 's', 'f': 'i', 'D': 'G', 'O': 'R', 'W': 'Z', 'q': 't', 'P': 'S', 'T': 'W', 'j': 'm', 'y': 'b', 'a': 'd', 'g': 'j', 'n': 'q', 'A': 'D', 'o': 'r', 'k': 'n', 'Q': 'T'}

问题是在某一点上,
i+shift
大于
len(小)
len(大写)
,您需要使用:

输出

{'B': 'E', 'w': 'z', 'e': 'h', 's': 'v', 'C': 'F', 'K': 'N', 'Z': 'C', 'v': 'y', 'I': 'L', 'r': 'u', 'S': 'V', 'R': 'U', 'X': 'A', 'l': 'o', 'N': 'Q', 'J': 'M', 'b': 'e', 'i': 'l', 'E': 'H', 'G': 'J', 'x': 'a', 'L': 'O', 'h': 'k', 'c': 'f', 'm': 'p', 'u': 'x', 'H': 'K', 'd': 'g', 'U': 'X', 'Y': 'B', 'F': 'I', 't': 'w', 'z': 'c', 'M': 'P', 'V': 'Y', 'p': 's', 'f': 'i', 'D': 'G', 'O': 'R', 'W': 'Z', 'q': 't', 'P': 'S', 'T': 'W', 'j': 'm', 'y': 'b', 'a': 'd', 'g': 'j', 'n': 'q', 'A': 'D', 'o': 'r', 'k': 'n', 'Q': 'T'}

两个for循环中的行似乎相同?当
i
0
运行到
len(大写)
shift=3
时,最后3个条目的
capital[i+shift]
将失败。您的代码不知道如何处理X、Y和Z。您需要找到一种方法来告诉它,Z之后又是a。两个for循环中的行似乎是相同的?当
i
0
运行到
len(大写)
shift=3
时,
capital[i+shift]
将在最后3个条目中失败。您的代码不知道如何处理X、Y和Z。您需要找到一种方法来告诉它,Z之后又是a。使用%len(大写)非常明智。非常感谢。使用%len(资本)是非常明智的。非常感谢。