塞萨尔密码:Python

2024-10-03 21:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我要先把我目前掌握的东西贴出来,然后告诉你发生了什么。。。你知道吗

PasteBin

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。,!?befghijklmnopqrstuvxy”。你知道吗

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

我已经检查了我的代码很多次,我不知道如何让它去。你知道吗

谢谢。你知道吗


Tags: 编码indexlenshiftcountermsgintprint
1条回答
网友
1楼 · 发布于 2024-10-03 21:32:11

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

相关问题 更多 >