字符串拒绝连接?

时间:2018-07-09 02:58:26

标签: python

为此,我试图在python中构建an enigma machine只是为了挑战自己,并搞乱加密消息

但是,我在最终循环中遇到了问题,该循环实际上对消息进行了加密。

def encMess():
searching = True
searchPins = True
changeRotor = True
finalMess = ""
incMess = -1
while searching == True:
    print("Searching...")
    while searchPins == True:
        print("Searching Pins...")
        incMess = incMess + 1
        incPins = 0
        if incMess == len(message)-1:
            searchPins = False
        else:
            while incPins < len(initPins):
                print("Incrementing Pins...")
                if message[incMess] in initPins[incPins]:
                    if message[incMess] == initPins[incPins][0]:
                        finalMess = finalMess + initPins[incPins][1]
                    else:
                        finalMess = finalMess + initPins[incPins][0]
                incPins = incPins + 1
                print(finalMess)
    if len(finalMess) == len(message):
        searching = False

当我运行整个程序时,它只是陷入了“搜索...”循环中。消息变量只是“ thisisatestmessage”,但是如果我只是运行内部循环,则事情会在停止之前循环两次,而没有外部while循环,这会改变字母并重置引脚计数器。可能是因为我在initPins数组中只使用了两个引脚吗?因为finalMess变量最终只是空白。感谢您的帮助

编辑:这是所有使用的变量的创建:

    global initPins
    initPins = [["a","b"],["t","z"]]
    global finalMess
    finalMess = ""
    global message
    message = "thisisatestmessage"

这很乱,我知道。仍然开始尝试我的组织风格

1 个答案:

答案 0 :(得分:0)

在内部逻辑中,

if message[incMess] in initPins[incPins]:
    if message[incMess] == initPins[incPins][0]:
        finalMess = finalMess + initPins[incPins][1]
    else:
        finalMess = finalMess + initPins[incPins][0]
incPins = incPins + 1

如果您的引脚上有未映射的字母,则例程将下降至incPins + 1行,然后继续执行消息中的下一个字母,将无效写到最后信息。因此,最终消息长度永远不会等于起始消息长度,因此您永远也不会停止。

顺便说一句,我通过我的IDE使用python调试器PDB解决了这个问题。这是一个很好的工具。

此外,您的if len(finalMess) == len(message):需要缩进一个块中,以便在正确的级别进行检查。

哦,是的:您可以在global语句中列出多个符号。

这是稍作修改的版本,它将停止。我加了一段短暂的睡眠,这样我就可以看到它们的输出,而不是让它们滚动到屏幕之外。

import time

global initPins
initPins = [["a", "b"], ["t", "z"]]
global finalMess
finalMess = "X"
global message
message = "thisisatestmessage"


def encMess():
    searching = True
    searchPins = True
    changeRotor = True
    finalMess = ""
    incMess = -1
    while searching == True:
        print("Searching...")
        time.sleep(.25 )
        while searchPins == True:
            print("Searching Pins...")
            incMess = incMess + 1
            incPins = 0
            print(incMess, len(message)-1)
            if incMess == len(message)-1:
                searchPins = False
            else:
                while incPins < len(initPins):
                    print("Incrementing Pins...")
                    if message[incMess] in initPins[incPins]:
                        if message[incMess] == initPins[incPins][0]:
                            finalMess = finalMess + initPins[incPins][1]
                    else:
                        finalMess = finalMess + initPins[incPins][0]
                    incPins = incPins + 1
                    print(finalMess, len(finalMess), len(message) )

            if len(finalMess) == len(message):
                searching = False



encMess()