Python伪超韦氏词典生成字符串数量不足问题求助
3字符伪超韦氏词典生成数量不足问题排查与解决
问题背景
我正在用Python开发伪超韦氏词典,针对3字符场景,预期应生成17567个结果字符串,但实际仅生成16300个,仅达预期的92%。尝试过修改数值、排查硬件限制、检查变量和运算逻辑,均无改善。
原代码如下:
abcs = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] entrydict = {} #Variables ites = 0 char1 = 0 char2 = 0 char3 = 0 char4 = 0 char5 = 0 char6 = 0 char7 = 0 char8 = 0 char9 = 0 char10 = 0 char11 = 0 char12 = 0 char13 = 0 char14 = 0 char15 = 0 word_guess = "" ################################################################################ #Actual Cracker word_guess = abcs[char1] + abcs[char2] + abcs[char3] + abcs[char4] \ + abcs[char5] + abcs[char6] + abcs[char7] + abcs[char8] + abcs[char9] \ + abcs[char10] + abcs[char11] + abcs[char12] + abcs[char13] + abcs[char14] \ + abcs[char15] while True: if char15 < 25: char15 += 1 elif char14 < 25: char14 += 1 char15 -= 25 elif char13 < 25: char13 += 1 char14 -= 25 elif char12 < 25: char12 += 1 char13 -= 25 elif char11 < 25: char11 += 1 char12 -= 25 elif char10 < 25: char10 += 1 char11 -= 25 elif char9 < 25: char9 += 1 char10 -= 25 elif char8 < 25: char8 += 1 char9 -= 25 elif char7 < 25: char7 += 1 char8 -= 25 elif char6 < 25: char6 += 1 char7 -= 25 elif char5 < 25: char5 += 1 char6 -= 25 elif char4 < 25: char4 += 1 char5 -= 25 elif char3 < 25: char3 += 1 char4 -= 25 elif char2 < 25: char2 += 1 char3 -= 25 elif char1 < 25: char1 += 1 char2 -= 25 word_guess = abcs[char1] + abcs[char2] + abcs[char3] + abcs[char4] \ + abcs[char5] + abcs[char6] + abcs[char7] + abcs[char8] + abcs[char9] \ + abcs[char10] + abcs[char11] + abcs[char12] + abcs[char13] + abcs[char14] \ + abcs[char15] ites += 1 if ites < 1000000: entrydict[ites] = word_guess if char13 == 25: break ################################################################################ print(f'There were {str(ites)} iterations recognized.') while True: try: index = int(input("Give an index: ")) print(f'Index {index} contains: {entrydict[index]}') except IndexError: print("Whoops!, IndexError") continue except TypeError: print("Whoops!, TypeError") continue except ValueError: print("Whoops!, ValueError") continue except KeyError: print("Whoops!, KeyError") continue
问题根源
- 错误的终止条件:代码以
char13 == 25作为循环终止判断,但3字符场景下这个条件会在远未生成完所有组合时就中断循环,直接导致生成数量不足。 - 冗余的字符变量:定义了16个字符变量(char1到char15),但实际仅需3个,多余的变量逻辑增加了代码复杂度,也容易引发逻辑错误。
- 不严谨的进位逻辑:使用
char15 -=25这类减法操作不如直接重置为0直观,容易出现计算偏差。
修复方案
针对3字符场景简化代码,调整循环逻辑和终止条件:
abcs = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"] entrydict = {} ites = 0 # 仅保留3个字符变量,匹配3字符场景 char1 = 0 char2 = 0 char3 = 0 while True: # 生成当前3字符组合 word_guess = abcs[char1] + abcs[char2] + abcs[char3] ites += 1 entrydict[ites] = word_guess # 3字符的进位逻辑,直观清晰 if char3 < 25: char3 += 1 elif char2 < 25: char2 += 1 char3 = 0 elif char1 < 25: char1 += 1 char2 = 0 char3 = 0 else: # 所有3字符组合生成完毕,退出循环 break print(f'There were {str(ites)} iterations recognized.') while True: try: index = int(input("Give an index: ")) print(f'Index {index} contains: {entrydict[index]}') except ValueError: print("Whoops!, ValueError") continue except KeyError: print("Whoops!, KeyError") continue
修复说明
- 移除了冗余的char4到char15变量,聚焦3字符场景,减少逻辑干扰
- 优化进位逻辑,用
=0替代减法操作,避免计算错误 - 调整终止条件,仅当三个字符都遍历完所有字母后才退出循环,确保生成所有26^3=17576个组合(若你预期17567,可额外添加过滤逻辑排除9个不需要的组合)
- 简化字符串拼接操作,只生成3字符结果,符合需求
内容的提问来源于stack exchange,提问作者Henrik O'Connell
相关产品推荐
相关产品推荐

