You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题根源

  1. 错误的终止条件:代码以char13 == 25作为循环终止判断,但3字符场景下这个条件会在远未生成完所有组合时就中断循环,直接导致生成数量不足。
  2. 冗余的字符变量:定义了16个字符变量(char1到char15),但实际仅需3个,多余的变量逻辑增加了代码复杂度,也容易引发逻辑错误。
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:05:42