凯撒密码:Python
Ceasar's Cipher: Python
我将首先发布目前为止的内容,然后告诉您发生了什么...
osalt = ".,!? ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def decode():
int = 0
counter = 0
msg = requestString("What would you like Decoded?").upper()
print "Now decoding, '"+msg+"'."
print "==========Please Wait=========="
while (int < len(osalt)):
dmsg = ""
nsalt = ""
int += 1
int2 = 0
shift = int-1
while int2 <= len(osalt):
if int2+shift < len(osalt):
nsalt += osalt[int2+shift]
else:
nsalt += osalt[int2+shift-len(osalt)-1]
int2 += 1
for letter in msg:
index = nsalt.find(letter)
dmsg += nsalt[index]
print dmsg
counter += 1
print counter
decode()
这应该做的是编码消息在解码时可能的 31 种可能性的列表。你输入编码的消息然后它通过,一次移动 salt 1 个字符......所以第二个 salt 看起来像这样:“Z.,!? ABCDEFGHIJKLMNOPQRSTUVWXY”。
我遇到的问题是它根本没有移动盐,最终打印了 31 次输入。
我检查了我的代码很多次,但我不知道如何让它运行。
谢谢。
首先,在发布代码时确保它可以执行。当前您有一个未定义的函数 (requestString
) 并且在 print counter
.
行的缩进不一致
关于这个问题,你这里有两个错误。首先来看
index = nsalt.find(letter)
dmsg += nsalt[index]
您在 nsalt
中找到一个字母的位置,然后将完全相同的字母添加到 dmsg
。这就是为什么你总是打印同样的东西。将其中之一更改为 osalt
。
其次,当你这样做时,你会得到一个 string index out of range
错误。这是因为您的 nsalt
字符串实际上比 osalt
长一个字符并且包含重复的字母。这是因为行
while int2 <= len(osalt):
你应该只使用 <
。 int2
从0开始,表示当前在nsalt
中的位置,所以应该在len(osalt) - 1
结束。
我将首先发布目前为止的内容,然后告诉您发生了什么...
osalt = ".,!? ABCDEFGHIJKLMNOPQRSTUVWXYZ"
def decode():
int = 0
counter = 0
msg = requestString("What would you like Decoded?").upper()
print "Now decoding, '"+msg+"'."
print "==========Please Wait=========="
while (int < len(osalt)):
dmsg = ""
nsalt = ""
int += 1
int2 = 0
shift = int-1
while int2 <= len(osalt):
if int2+shift < len(osalt):
nsalt += osalt[int2+shift]
else:
nsalt += osalt[int2+shift-len(osalt)-1]
int2 += 1
for letter in msg:
index = nsalt.find(letter)
dmsg += nsalt[index]
print dmsg
counter += 1
print counter
decode()
这应该做的是编码消息在解码时可能的 31 种可能性的列表。你输入编码的消息然后它通过,一次移动 salt 1 个字符......所以第二个 salt 看起来像这样:“Z.,!? ABCDEFGHIJKLMNOPQRSTUVWXY”。
我遇到的问题是它根本没有移动盐,最终打印了 31 次输入。
我检查了我的代码很多次,但我不知道如何让它运行。
谢谢。
首先,在发布代码时确保它可以执行。当前您有一个未定义的函数 (requestString
) 并且在 print counter
.
关于这个问题,你这里有两个错误。首先来看
index = nsalt.find(letter)
dmsg += nsalt[index]
您在 nsalt
中找到一个字母的位置,然后将完全相同的字母添加到 dmsg
。这就是为什么你总是打印同样的东西。将其中之一更改为 osalt
。
其次,当你这样做时,你会得到一个 string index out of range
错误。这是因为您的 nsalt
字符串实际上比 osalt
长一个字符并且包含重复的字母。这是因为行
while int2 <= len(osalt):
你应该只使用 <
。 int2
从0开始,表示当前在nsalt
中的位置,所以应该在len(osalt) - 1
结束。