质数号码和选号器 - API参考文档
目录
数据获取模块
DataFetcher类
数据获取器,负责从互联网获取3D/P3开奖数据。
初始化
from data_fetcher import DataFetcher
fetcher = DataFetcher()
方法
##### fetch_data(data_type: str) -> Optional[pd.DataFrame]
从互联网获取指定类型的开奖数据。
参数:
data_type(str): 数据类型,'3D' 或 'P3'
返回:
Optional[pd.DataFrame]: 包含开奖数据的DataFrame,失败返回None
DataFrame列结构:
3D数据(17列):
- 开奖期号
- 开奖日期
- 开奖号百位
- 开奖号十位
- 开奖号个位
- 试机号百位
- 试机号十位
- 试机号个位
- ...(其他列)
P3数据(12列):
- 开奖期号
- 开奖日期
- 开奖号百位
- 开奖号十位
- 开奖号个位
- ...(其他列)
示例:
df = fetcher.fetch_data('3D')
if df is not None:
print(f"获取到 {len(df)} 期数据")
print(df.head())
##### get_latest_period(data_type: str) -> Optional[Dict]
获取最新一期开奖数据。
参数:
data_type(str): 数据类型
返回:
Optional[Dict]: 包含最新一期数据的字典,失败返回None
字典结构:
{
'期号': int,
'日期': str,
'百位': int,
'十位': int,
'个位': int,
'号码': str
}
示例:
latest = fetcher.get_latest_period('3D')
if latest:
print(f"最新期号: {latest['期号']}")
print(f"最新号码: {latest['号码']}")
##### clear_cache()
清除数据缓存。
示例:
fetcher.clear_cache()
遗漏值计算模块
OmissionCalculator类
遗漏值计算器,计算百位、十位、个位的遗漏值。
初始化
from omission_calculator import OmissionCalculator
import pandas as pd
# history_data 是包含历史开奖数据的DataFrame
calculator = OmissionCalculator(history_data)
参数:
history_data(pd.DataFrame): 历史开奖数据,必须包含以下列:- '开奖期号'
- '开奖号百位'
- '开奖号十位'
- '开奖号个位'
- 数据应按期号降序排列(最新在前)
方法
##### calculate_omission(digit: int, position: str) -> int
计算指定位置指定数字的遗漏值。
参数:
digit(int): 数字(0-9)position(str): 位置,'百位'、'十位'或'个位'
返回:
int: 遗漏值(期数)
示例:
# 计算百位0的遗漏值
omission = calculator.calculate_omission(0, '百位')
print(f"百位0的遗漏值: {omission}")
##### calculate_omissions_for_number(number: str) -> Dict[str, int]
计算指定号码的百位、十位、个位遗漏值。
参数:
number(str): 三位号码字符串,如"000"、"123"等
返回:
Dict[str, int]: 包含百位、十位、个位遗漏值的字典
字典结构:
{
'百位': int,
'十位': int,
'个位': int
}
示例:
omissions = calculator.calculate_omissions_for_number("000")
print(f"百位遗漏: {omissions['百位']}")
print(f"十位遗漏: {omissions['十位']}")
print(f"个位遗漏: {omissions['个位']}")
##### calculate_omission_sum(number: str) -> int
计算指定号码的百位、十位、个位遗漏值总和。
参数:
number(str): 三位号码字符串
返回:
int: 遗漏值总和
示例:
total = calculator.calculate_omission_sum("000")
print(f"遗漏值总和: {total}")
质数判断模块
PrimeChecker类
质数判断器,判断一个数是否为质数。
初始化
from prime_checker import PrimeChecker
checker = PrimeChecker()
方法
##### is_prime(n: int) -> bool
判断一个数是否为质数。
参数:
n(int): 要判断的整数
返回:
bool: True表示是质数,False表示不是质数
算法:
- 使用试除法
- 只需检查到sqrt(n)
- 使用缓存优化性能
示例:
print(checker.is_prime(17)) # True
print(checker.is_prime(18)) # False
print(checker.is_prime(2)) # True
print(checker.is_prime(1)) # False
##### clear_cache()
清除质数缓存。
示例:
checker.clear_cache()
号码筛选模块
NumberFilter类
号码筛选器,筛选出遗漏值总和为质数的号码。
初始化
from number_filter import NumberFilter
import pandas as pd
# history_data 是包含历史开奖数据的DataFrame
filter_obj = NumberFilter(history_data)
方法
##### filter_numbers(progress_callback=None) -> List[Dict]
筛选出符合条件的号码(遗漏值总和为质数)。
参数:
progress_callback(Callable, optional): 可选的回调函数,用于报告进度- 函数签名:
callback(current: int, total: int, number: str) current: 当前处理的号码索引(1-based)total: 总号码数(1000)number: 当前处理的号码
返回:
List[Dict]: 符合条件的号码列表
列表元素结构:
{
'number': str, # 号码字符串,如"000"
'hundreds_omission': int, # 百位遗漏值
'tens_omission': int, # 十位遗漏值
'ones_omission': int, # 个位遗漏值
'total_omission': int # 遗漏值总和
}
示例:
def progress(current, total, number):
print(f"处理中: {current}/{total} ({number})")
results = filter_obj.filter_numbers(progress_callback=progress)
print(f"筛选出 {len(results)} 个符合条件的号码")
for item in results:
print(f"{item['number']}: 总和={item['total_omission']}")
历史模拟模块
HistorySimulator类
历史模拟器,模拟测试历史期数,验证筛选效果。
初始化
from history_simulator import HistorySimulator
import pandas as pd
# history_data 是包含历史开奖数据的DataFrame
simulator = HistorySimulator(history_data)
方法
##### simulate_periods(num_periods: int, progress_callback=None) -> List[Dict]
模拟测试过去若干期,找出遗漏值总和为质数的期数。
参数:
num_periods(int): 要测试的期数(从最新一期往前数)progress_callback(Callable, optional): 可选的回调函数- 函数签名:
callback(current: int, total: int, period: int) current: 当前测试的期数索引(1-based)total: 总测试期数period: 当前测试的期号
返回:
List[Dict]: 符合条件的期数列表
列表元素结构:
{
'period': int, # 期号
'date': str, # 开奖日期
'number': str, # 开奖号码
'hundreds_omission': int, # 百位遗漏值
'tens_omission': int, # 十位遗漏值
'ones_omission': int, # 个位遗漏值
'total_omission': int # 遗漏值总和
}
示例:
def progress(current, total, period):
print(f"测试中: {current}/{total} (期号: {period})")
results = simulator.simulate_periods(100, progress_callback=progress)
print(f"找到 {len(results)} 期符合条件的开奖")
for item in results:
print(f"期号 {item['period']}: {item['number']}, 总和={item['total_omission']}")
注册系统模块
ClientLicenseValidator类
客户端授权验证器,验证授权文件的有效性。
初始化
from registration.client_license_validator import ClientLicenseValidator
validator = ClientLicenseValidator(
public_key_path="registration/keys/public_key.pem",
license_file="license.json"
)
方法
##### load_license() -> Optional[Dict]
加载授权文件。
返回:
Optional[Dict]: 授权文件内容,失败返回None
##### verify_license(license_data: Dict = None) -> Tuple[bool, str]
验证授权文件。
参数:
license_data(Dict, optional): 授权数据,如果为None则从文件加载
返回:
Tuple[bool, str]: (是否有效, 原因说明)
##### get_license_info() -> Optional[Dict]
获取授权信息。
返回:
Optional[Dict]: 授权信息字典
ActivationDialog类
激活对话框,用于用户激活软件。
初始化
from registration.client_license_validator import ActivationDialog
dialog = ActivationDialog(parent_window, validator)
使用示例
完整示例:筛选号码
from data_fetcher import DataFetcher
from number_filter import NumberFilter
# 1. 获取数据
fetcher = DataFetcher()
df = fetcher.fetch_data('3D')
if df is not None:
# 2. 创建筛选器
filter_obj = NumberFilter(df)
# 3. 筛选号码
results = filter_obj.filter_numbers()
# 4. 显示结果
print(f"筛选出 {len(results)} 个符合条件的号码")
for item in results[:10]: # 显示前10个
print(f"{item['number']}: {item['total_omission']}")
完整示例:历史模拟测试
from data_fetcher import DataFetcher
from history_simulator import HistorySimulator
# 1. 获取数据
fetcher = DataFetcher()
df = fetcher.fetch_data('3D')
if df is not None:
# 2. 创建模拟器
simulator = HistorySimulator(df)
# 3. 模拟测试100期
results = simulator.simulate_periods(100)
# 4. 显示结果
print(f"测试100期,找到 {len(results)} 期符合条件的开奖")
print(f"命中率: {len(results)/100*100:.2f}%")
版本:v1.1.0
更新日期:2025-12-18