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 种可能性的列表。您输入编码的消息,然后它通过,一次移动 1 个盐字符......所以第二个盐看起来像这样:“Z.,!?ABCDEFGHIJKLMNOPQRSTUVWXY”。

我遇到的问题是它根本没有移动盐,最终打印了 31 次输入。

我已经多次查看我的代码,但我无法弄清楚如何让它运行。

谢谢。

4

1 回答 1

0

首先,在发布代码时确保它可以执行。目前,您有一个未定义的函数 ( 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

于 2015-09-07T00:56:55.967 回答