2码稳定底王 - 开发者文档
📚 目录
📁 项目结构
2码稳定底王/
├── main.py # 主程序入口
├── config.py # 配置文件
├── core_algorithm.py # 核心算法模块
├── data_fetcher.py # 数据获取模块
├── requirements.txt # 依赖包列表
│
├── utils/ # 工具模块
│ ├── __init__.py
│ ├── logger.py # 日志系统
│ ├── validators.py # 数据验证
│ └── ui_helpers.py # UI工具函数
│
├── registration/ # 注册系统
│ ├── __init__.py
│ ├── client_license_validator.py # 客户端验证器
│ ├── production_registration_core.py # 注册核心
│ └── 注册管理工具.py # 注册管理工具
│
├── data/ # 数据目录(自动创建)
│ └── *.xlsx, *.csv, *.txt # 导出的数据文件
│
├── logs/ # 日志目录(自动创建)
│ └── app_YYYYMMDD.log # 日志文件
│
├── docs/ # 文档目录
│ ├── 用户手册.md
│ ├── 开发者文档.md
│ └── API文档.md
│
└── tests/ # 测试目录
├── test_algorithm.py
├── test_data_fetch.py
└── ...
🏗️ 代码架构
架构图
┌─────────────────────────────────────────┐
│ GUI Layer (main.py) │
│ - 用户界面 │
│ - 事件处理 │
│ - 结果显示 │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ Business Logic Layer │
│ - core_algorithm.py (算法逻辑) │
│ - data_fetcher.py (数据获取) │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ Utility Layer │
│ - utils/logger.py (日志) │
│ - utils/validators.py (验证) │
│ - utils/ui_helpers.py (UI工具) │
└──────────────┬──────────────────────────┘
│
┌──────────────▼──────────────────────────┐
│ Config Layer │
│ - config.py (配置管理) │
└─────────────────────────────────────────┘
模块依赖关系
main.py
├── config.py
├── core_algorithm.py
├── data_fetcher.py
├── utils/logger.py
├── utils/validators.py
├── utils/ui_helpers.py
└── registration/client_license_validator.py
└── registration/production_registration_core.py
🔧 核心模块
1. main.py - 主程序
职责:
- GUI界面创建和管理
- 用户交互处理
- 功能调用和结果展示
主要类:
LotteryApp: 主应用程序类
关键方法:
__init__(): 初始化应用create_widgets(): 创建界面组件update_latest(): 更新最新开奖号码custom_number(): 自定义号码处理backtest(): 历史回测get_matching_numbers(): 获取匹配号码export_to_excel(): 导出Excelexport_matching_numbers(): 导出匹配号码
2. core_algorithm.py - 核心算法
职责:
- 实现29组稳定2码生成算法
- 实现匹配检查算法
主要函数:
convert_to_dual_code(number_str): 转换为对码get_six_and_four_codes(original_number): 获取6码和4码get_even_numbers_from_six_codes(six_codes): 提取偶数calculate_three_numbers(even_list): 计算三个数字get_29_groups(original_number): 生成29组2码check_match(lottery_number, groups): 检查匹配
算法流程:
开奖号码 → 转对码 → 分离6码4码 → 提取偶数 →
两两相加 → 查找对应两码 → 加上对码 → 29组2码
3. data_fetcher.py - 数据获取
职责:
- 从互联网获取开奖数据
- 解析数据格式
- 提供数据接口
主要类:
DataFetcher: 数据获取类
主要方法:
fetch_data(lottery_type): 获取原始数据get_latest_number(lottery_type): 获取最新开奖号码get_history_data(lottery_type, periods): 获取历史数据
数据源:
- 3D: [数据源地址已隐藏]
- P3: [数据源地址已隐藏]
4. config.py - 配置管理
职责:
- 统一管理所有配置常量
- 提供配置接口
主要配置:
- 算法常量(GROUPS_COUNT, EVEN_COUNT等)
- 网络配置(REQUEST_TIMEOUT, DATA_URLS等)
- UI配置(WINDOW_WIDTH, COLORS等)
- 导出配置(EXPORT_FORMATS等)
5. utils/logger.py - 日志系统
职责:
- 提供统一的日志接口
- 管理日志文件
主要函数:
setup_logger(name, log_level): 设置日志系统get_logger(name): 获取日志器
日志级别:
- DEBUG: 调试信息
- INFO: 一般信息
- WARNING: 警告信息
- ERROR: 错误信息
6. utils/validators.py - 数据验证
职责:
- 验证用户输入
- 提供验证函数
主要函数:
validate_lottery_number(number): 验证开奖号码validate_periods(periods_str): 验证回测期数
7. registration/ - 注册系统
职责:
- 管理软件试用和注册
- 验证授权文件
主要类:
ClientLicenseValidator: 客户端授权验证器TrialManager: 试用期管理器HardwareIdentifier: 硬件标识符RSAKeyManager: RSA密钥管理LicenseGenerator: 许可证生成器
📖 API文档
core_algorithm.py
get_29_groups(original_number: str) -> List[str]
生成29组稳定2码。
参数:
original_number(str): 开奖号码字符串,如 "218"
返回:
List[str]: 29组2码列表,如 ["01", "04", "05", ...]
示例:
from core_algorithm import get_29_groups
groups = get_29_groups("218")
print(groups) # ['01', '04', '05', ...]
check_match(lottery_number: str, groups: List[str]) -> bool
检查开奖号码是否匹配29组2码。
参数:
lottery_number(str): 开奖号码,如 "281"groups(List[str]): 29组2码列表
返回:
bool: 是否匹配
示例:
from core_algorithm import check_match
is_match = check_match("281", ["01", "18", "28", ...])
print(is_match) # True or False
data_fetcher.py
DataFetcher.get_latest_number(lottery_type: str) -> Tuple[bool, str, Optional[str]]
获取最新一期开奖号码。
参数:
lottery_type(str): 彩种类型,'3D' 或 'P3'
返回:
Tuple[bool, str, Optional[str]]: (成功标志, 消息, 开奖号码)
示例:
from data_fetcher import DataFetcher
fetcher = DataFetcher()
success, message, number = fetcher.get_latest_number("3D")
if success:
print(f"最新开奖号码: {number}")
DataFetcher.get_history_data(lottery_type: str, periods: int) -> Tuple[bool, str, List[Tuple[str, str]]]
获取历史开奖数据。
参数:
lottery_type(str): 彩种类型,'3D' 或 'P3'periods(int): 期数
返回:
Tuple[bool, str, List[Tuple[str, str]]]: (成功标志, 消息, 数据列表)- 数据格式:[(期号, 开奖号码), ...]
示例:
from data_fetcher import DataFetcher
fetcher = DataFetcher()
success, message, history = fetcher.get_history_data("3D", 100)
if success:
for period, number in history:
print(f"{period}: {number}")
utils/validators.py
validate_lottery_number(number: str) -> Tuple[bool, str]
验证开奖号码格式。
参数:
number(str): 开奖号码字符串
返回:
Tuple[bool, str]: (是否有效, 错误消息)
示例:
from utils.validators import validate_lottery_number
is_valid, error_msg = validate_lottery_number("218")
if not is_valid:
print(error_msg)
validate_periods(periods_str: str) -> Tuple[bool, str, int]
验证回测期数。
参数:
periods_str(str): 期数字符串
返回:
Tuple[bool, str, int]: (是否有效, 错误消息, 期数)
示例:
from utils.validators import validate_periods
is_valid, error_msg, periods = validate_periods("100")
if not is_valid:
print(error_msg)
💻 开发环境
环境要求
- Python 3.6+
- pip 包管理器
- Git(可选)
环境搭建
- 克隆项目(如果有Git仓库)
git clone <repository-url>
cd 2码稳定底王
- 创建虚拟环境(推荐)
python -m venv venv
# Windows
venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
- 安装依赖
pip install -r requirements.txt
- 运行程序
python main.py
开发工具推荐
- IDE: PyCharm, VS Code
- 代码格式化: black
- 代码检查: flake8, pylint
- 类型检查: mypy
- 测试框架: pytest
📝 代码规范
命名规范
- 类名: 使用大驼峰命名(PascalCase),如
LotteryApp - 函数名: 使用小写下划线命名(snake_case),如
get_29_groups - 常量: 使用全大写下划线命名,如
GROUPS_COUNT - 变量: 使用小写下划线命名,如
lottery_number
代码风格
- 遵循 PEP 8 代码规范
- 使用4个空格缩进
- 行长度不超过79字符(可适当放宽到100)
- 函数和类之间空2行
- 使用类型提示(Type Hints)
注释规范
- 模块级文档字符串
- 类和函数文档字符串
- 复杂逻辑添加行内注释
示例:
def get_29_groups(original_number: str) -> List[str]:
"""
根据开奖号码获取29组稳定大底
Args:
original_number: 开奖号码字符串,如 "218"
Returns:
29组两码的列表
"""
# 实现代码...
🔨 扩展开发
添加新功能
- 在main.py中添加功能方法
def new_feature(self):
"""新功能说明"""
# 实现代码
- 在create_widgets()中添加UI组件
btn_new = tk.Button(..., command=self.new_feature)
- 更新config.py添加配置(如需要)
添加新的数据源
- 修改data_fetcher.py
URLS = {
'3D': '[数据源地址已隐藏]
'P3': '[数据源地址已隐藏]
'NEW': 'http://new-source.com/data.txt' # 新数据源
}
- 实现数据解析逻辑
添加新的导出格式
- 在export_matching_numbers()中添加格式选项
- 在_do_export_matching_numbers_multiple()中实现导出逻辑
自定义算法
- 修改core_algorithm.py
- 保持函数接口不变(如需要)
- 更新测试用例
🧪 测试
运行测试
# 运行所有测试
python -m pytest tests/
# 运行特定测试
python -m pytest tests/test_algorithm.py
# 运行测试并显示覆盖率
python -m pytest tests/ --cov=.
编写测试
import unittest
from core_algorithm import get_29_groups
class TestAlgorithm(unittest.TestCase):
def test_get_29_groups(self):
groups = get_29_groups("218")
self.assertEqual(len(groups), 29)
self.assertIn("01", groups)
📦 打包发布
使用PyInstaller打包
- 安装PyInstaller
pip install pyinstaller
- 打包命令
pyinstaller --onefile --windowed --name="2码稳定底王" main.py
- 打包选项说明
--onefile: 打包成单个exe文件--windowed: 不显示控制台窗口--name: 指定exe文件名
打包注意事项
- 确保所有依赖都已安装
- 测试打包后的exe是否正常运行
- 检查文件大小是否合理
- 测试在不同Windows版本上的兼容性
🔍 调试技巧
使用日志系统
from utils.logger import get_logger
logger = get_logger("模块名")
logger.debug("调试信息")
logger.info("一般信息")
logger.warning("警告信息")
logger.error("错误信息", exc_info=True)
使用断点调试
在IDE中设置断点,逐步调试代码。
查看日志文件
日志文件保存在 logs/ 目录下,文件名格式:app_YYYYMMDD.log
📚 参考资料
文档版本: v1.5
最后更新: 2026-01-03