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

如何编写符合指定规则的自定义词表生成Python脚本?

完善后的自定义词表生成脚本

以下是完全符合你规则要求的Python脚本,同时修正了原代码的核心逻辑问题:

import random
from itertools import permutations, product

# 规则配置
REQUIRED_KEYWORDS = ['NOSAM', 'ESYC', 'UMG']
ALLOWED_NUM_SEGMENTS = ['20', '21', '22', '23', '24']
MIN_LENGTH = 8
MAX_LENGTH = 15
OUTPUT_FILE = 'wordlist.txt'

def random_case(word):
    """将字符串每个字符随机转换为大写/小写"""
    return ''.join(random.choice([c.upper(), c.lower()]) for c in word)

def generate_valid_entries():
    valid_entries = set()  # 用集合自动去重

    # 生成三个关键词的随机大小写变体
    keyword_variants = [random_case(kw) for kw in REQUIRED_KEYWORDS]
    
    # 遍历关键词的所有排列顺序
    for keyword_order in permutations(keyword_variants):
        keywords_total_len = sum(len(kw) for kw in keyword_order)
        available_len = MAX_LENGTH - keywords_total_len
        if available_len < 0:
            continue  # 关键词总长度已超出上限,跳过

        # 数字段可插入的位置:前、三个关键词之间、后,共4个位置
        insert_positions = 4
        max_num_segments = available_len // 2  # 每个数字段占2字符

        # 遍历所有可能的数字段数量
        for num_segments_count in range(0, max_num_segments + 1):
            # 分配数字段到4个位置(允许位置分配0个)
            for segment_distribution in product(range(num_segments_count + 1), repeat=insert_positions):
                if sum(segment_distribution) != num_segments_count:
                    continue
                
                total_len = keywords_total_len + 2 * num_segments_count
                if not (MIN_LENGTH <= total_len <= MAX_LENGTH):
                    continue

                # 构建完整条目
                parts = []
                # 前置数字段
                parts.append(''.join(random.choice(ALLOWED_NUM_SEGMENTS) for _ in range(segment_distribution[0])))
                # 关键词+中间数字段
                for i in range(3):
                    parts.append(keyword_order[i])
                    parts.append(''.join(random.choice(ALLOWED_NUM_SEGMENTS) for _ in range(segment_distribution[i+1])))
                
                valid_entries.add(''.join(parts))

    return valid_entries

if __name__ == '__main__':
    entries = generate_valid_entries()
    with open(OUTPUT_FILE, 'w') as f:
        for entry in entries:
            f.write(entry + '\n')
    print(f"已生成{len(entries)}个符合规则的词表条目,保存至{OUTPUT_FILE}")

关键修正与说明

  1. 关键词完整性保证:通过排列组合确保每个条目必含三个完整关键词的大小写变体,解决原代码拆分字符的问题。
  2. 合法数字段处理:仅使用20/21/22/23/24作为整体数字单元,支持在关键词前后/中间插入任意数量的合法数字段。
  3. 严格长度控制:计算关键词总长度后,动态限制数字段的总长度,确保最终条目长度在8-15字符范围内。
  4. 随机大小写实现:针对每个关键词的单个字符独立随机大小写,满足规则要求的灵活格式。
  5. 去重机制:使用集合存储生成结果,自动避免重复条目。

内容的提问来源于stack exchange,提问作者SH_FD

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 12:21:49