好吧,所以在我的班上,我应该编写将字典转换为Ceasar密码的代码。我的代码将所有内容都移动得很好,但是按照与提供的测试用例不同的顺序返回密钥。
我的代码:
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','我':'我','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 ':'我','k':'k','m':'m','o':'o','q':'q','s':'s','u': '你','w':'w','y':'y'}
他们的输出:
{'A':'A','C':'C','B':'B','E':'E','D':'D','G':'G ','F':'F','我':'我','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':'我','h':'h','k':'k','j':'j', 'm':'m','l':'l','o':'o','n':'n','q':'q','p':'p','s ':'s','r':'r','你':'你','t':'t','w':'w','v':'v','y': 'y','x':'x','z':'z'}
我已经使用python进行测试和比较,它们确实是由相同的键组成的词:值。任何建议都会很棒。 (这是一个在线麻省理工学院的课程。通常有论坛,但是在有考试的情况下它们会关闭。这不适用于考试,
答案 0 :(得分:3)
Python中的字典不保留特定的顺序。因此,您无法确定按照(a)最初创建的顺序或(b)最后更新的顺序读取键和值。
很明显,这两本词典是相同的。
编辑:dict1 == dict2
足以证明两个词典是否相同;你不必分段检查每个键/值。
答案 1 :(得分: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]