首页 > 解决方案 > 字符串拒绝连接?

问题描述

作为序言,我正在尝试在 python 中构建一个谜机,只是为了挑战自己,并搞乱加密消息

但是,我在实际加密消息的最终循环中遇到了问题。

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 循环会更改字母并重置 pin 计数器。可能是因为我只在 initPins 数组中使用了两个引脚吗?因为 finalMess 变量最终只是空白。任何帮助表示赞赏

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

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

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

标签: python

解决方案


内在逻辑上,

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()

推荐阅读