凯撒密码第2部分

时间:2012-10-01 16:31:53

标签: python encryption

Caeser Cypher第二部分 - 好的,这是我上一周工作的一个进步,现在需要制作一个完全正常的ceasar cypher,它可以通过一定的移位值来判断一个句子。我不知道下一步该做什么..可以任何一个帮助,也为什么我在字母表第19行运行追溯错误,python说'字母'在我定义它时没有定义?

sentence = raw_input('Enter a sentence to be encrypted')
shift = input('Enter a shift value')

def createDict (shift):
    alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,'

alphaList=[]
for letter in alphabet:
    alphaList.append(letter)

alphaDict={}
for letter in alphaList:
    valueLetterIndex = (alphaList.index(letter) + shift)%len(alphaList)
    valueLetter = alphaList[valueLetterIndex]
    alphaDict[letter] = valueLetter

3 个答案:

答案 0 :(得分:2)

您在alphabet函数内创建了一个局部变量createDict(),但是......

  • 您永远不会调用此功能
  • 即使您这样做了,alphabet仍未在您尝试访问它的全局范围内定义

尝试删除createDict函数定义并取消缩进alphabet定义行:

sentence = raw_input('Enter a sentence to be encrypted')
shift = input('Enter a shift value')

alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ,'

alphaDict={}
for letter in alphabet:
    valueLetterIndex = (alphabet.index(letter) + shift)%len(alphabet)
    valueLetter = alphabet[valueLetterIndex]
    alphaDict[letter] = valueLetter

或许你真的打算在该函数中包含所有内容,在这种情况下,你需要在alphabet定义之下的所有内容中添加一个缩进级别。

作为旁注,您可以将alphaList构造简化为list(alphabet),或者仅使用alphabet而不是凯文建议的alphaList

答案 1 :(得分:1)

为什么使用createDict()功能?这很奇怪。你根本不使用它。 其次,我喜欢iPython。这是非常宝贵的工具。

  6 
  7 alphaList=[]
----> 8 for letter in alphabet:
  9   alphaList.append(letter)
  10 

  NameError: name 'alphabet' is not defined

你现在看到了。我认为有一种更简单的方法可以做到这一点。 您是否尝试过内置函数ord()chr()以及简单列表。

list = list('Your string')
text_to_encode = raw_input('Prompt') 
text_to_encode = list(text_to_encode)
for i in text_to_encode:
    in = (ord(text_to_encode)-65)
    code = (ord(text_to_encode)-65) 
    if in+code > 26:
        foo = code - in
        text_to_encode[i] = foo
    else:
        foo = code+in 

这只是伪代码。 尝试类似的东西。 这只适用于小写字母。对于大写字母,你必须添加几个elifs。

答案 2 :(得分:1)

def ceasar(s, n):
    # The characters in skipchars are not changed. Expand to your liking.
    skipchars = ' .,?/!@#$%^&*()[]{}'
    s = s.lower()
    t = ord('a')
    out = ''
    for c in s:
        if not c in skipchars:
            out += chr((ord(c)-t+n)%26 + t)
        else:
            out += c
    return out

为了测试它,我们使用13作为偏移:

In [21]: ceasar('This is a test.', 13)
Out[21]: 'guvf vf n grfg.'

In [22]: ceasar('guvf vf n grfg.', 13)
Out[22]: 'this is a test.'

In [23]: 'guvf vf n grfg.'.encode('rot13')
Out[23]: 'this is a test.'