如何切换到下一个索引?实现匹配guesser字符后递进索引逻辑
问题分析与修正方案
你的代码核心问题在于匹配逻辑错误:当匹配完第一个字符后,后续的候选字符串是已匹配内容+新字符,但你却拿这个完整的候选串去和目标的单个字符(比如guesser[1])比较,长度都不一样,肯定匹配不上,直接陷入死循环。
错误点拆解
- 第一段代码:始终只和
guesser[0]比较,匹配成功后,后续候选串变成'b' + 字符,永远不等于'b',无法继续。 - 第二段代码:匹配第一个字符后,候选串变成
'b' + 字符,却要和guesser[1](即'o')比较,长度不同,永远匹配失败。
修正后的代码
我们需要跟踪已匹配的前缀,每次尝试添加新字符后,检查这个新前缀是否和目标字符串的前n位一致(n是已匹配长度+1),直到前缀等于完整目标字符串:
import string guesser = "bomba" current_prefix = "" # 记录当前要匹配的字符索引 current_index = 0 while current_prefix != guesser: # 遍历所有可打印字符,尝试匹配当前位置的字符 for char in string.printable: candidate = current_prefix + char print(candidate) # 检查候选前缀是否等于目标的前current_index+1位 if candidate == guesser[:current_index+1]: current_prefix = candidate current_index += 1 # 找到当前字符后,跳出循环,开始匹配下一个字符 break
逻辑说明
current_prefix保存已经匹配成功的前缀,初始为空。- 每次循环只专注匹配目标字符串的第
current_index位字符:- 生成候选前缀
current_prefix + char - 对比这个候选前缀是否等于
guesser的前current_index+1个字符(比如第一次对比candidate是否等于'b',第二次对比是否等于'bo',以此类推) - 匹配成功后,更新前缀和索引,进入下一个字符的匹配循环。
- 生成候选前缀
内容的提问来源于stack exchange,提问作者Ventilators
相关产品推荐
相关产品推荐

