1

可能重复:
Caesar's Cipher using python,可能需要一点帮助

好的,所以在我的课堂上,我应该编写将字典转换为凯撒密码的代码。我的代码一切正常,但返回键的顺序与提供的测试用例不同。

我的代码:

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

for c in dCode.keys():

    if c in sUpperCase:

        if sUpperCase.index(c) + shift > 25:

            dCode[c] = sUpperCase[(sUpperCase.index(c) + shift) - 26]

        else:

            dCode[c] = sUpperCase[(sUpperCase.index(c) + shift)]

    if c in sLowerCase:

        if sLowerCase.index(c) + shift > 25:

            dCode[c] = sLowerCase[(sLowerCase.index(c) + shift) - 26]

        else:

            dCode[c] = sLowerCase[(sLowerCase.index(c) + shift)]

return dCode

我的 buildCoder(0) 输出(显然最容易阅读)

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

他们的输出:

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

我已经使用 python 进行测试和比较,它们确实是由相同的键组成的字典:值。任何建议都会很重要。(这是针对在线麻省理工学院的课程。通常有论坛,但是在有考试的时候它们就关闭了。这不是考试的,

4

2 回答 2

3

Python 中的字典不保留特定的顺序。因此,您不能确定键和值是否会按照 (a) 最初创建或 (b) 最后更新的顺序被读取。

很明显,这两个字典是相同的。

编辑:dict1 == dict2足以证明两个字典是否相同;您不必逐段检查每个键/值。

于 2012-11-04T07:07:14.470 回答
1

请注意,您应该使用模数%运算符而不是- 26.

代替

    if sUpperCase.index(c) + shift > 25:

        dCode[c] = sUpperCase[(sUpperCase.index(c) + shift) - 26]

    else:

        dCode[c] = sUpperCase[(sUpperCase.index(c) + shift)]

    dCode[c] = sUpperCase[(sUpperCase.index(c) + shift) % 26]
于 2012-11-04T07:34:19.920 回答