为此,我试图在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"
这很乱,我知道。仍然开始尝试我的组织风格
答案 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()