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
答案 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.'