python - 字符串拒绝连接?
问题描述
作为序言,我正在尝试在 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"
这很乱,我知道。仍在开始并尝试我的组织风格
解决方案
内在逻辑上,
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()
推荐阅读
- xml - 属性值上的 XSLT 字符串拆分
- logging - 使用 SLF4J 和 Logback 登录 Windows 事件日志
- python - 在二维数组中查找值的索引
- arrays - 为什么 MongoDB $size 为空子数组返回 1?
- apache-kafka - kafka消费者在手动/分配分区的情况下重新平衡
- c - getopt() 函数表现出奇怪的行为
- javascript - 我的提交功能以 Bad Gateway 502 响应
- python - Python ttk.OptionMenu 选项字体样式
- node.js - 根据特定对象 ID 获取对象数组
- excel - 在 Excel 中使用过滤后的电子邮件地址列创建新电子邮件