每次手动输入号码既费时又容易出错,为什么不试试用Python自动化完成呢?本文将带你从零开始构建一个完整的自动化选号系统,不仅能随机生成号码,还能定时运行并将结果保存到指定位置。无论你是想学习Python自动化实践,还是单纯想简化生活流程,这个项目都能给你带来实际价值。
在开始之前,确保你的系统已安装Python 3.6或更高版本。可以通过命令行输入python --version来检查。如果没有安装,可以从Python官网下载最新版本。
我们先来构建基础选号功能。创建一个新文件lottery_generator.py,写入以下代码:
python复制import random
import time
from pathlib import Path
def generate_numbers(pool_size, count):
"""生成指定范围内的随机号码"""
return sorted(random.sample(range(1, pool_size + 1), count))
class LotteryGenerator:
def __init__(self):
self.timestamp = time.strftime('%Y-%m-%d %H:%M:%S')
def generate_dlt(self):
"""生成大乐透号码"""
front = generate_numbers(35, 5)
back = generate_numbers(12, 2)
return f"{' '.join(f'{n:02d}' for n in front)} + {' '.join(f'{n:02d}' for n in back)}"
def generate_ssq(self):
"""生成双色球号码"""
red = generate_numbers(33, 6)
blue = generate_numbers(16, 1)
return f"{' '.join(f'{n:02d}' for n in red)} + {blue[0]:02d}"
这段代码比原始版本更加模块化,使用了面向对象的方式组织功能,便于后续扩展。generate_numbers函数负责核心的随机数生成逻辑,而LotteryGenerator类则封装了不同彩票类型的生成方法。
基础功能完成后,我们需要添加结果输出和日志记录功能。修改脚本,添加以下内容:
python复制def save_results(results, filename="lottery_results.txt"):
"""将结果保存到文件"""
desktop = Path.home() / "Desktop"
filepath = desktop / filename
with open(filepath, 'a', encoding='utf-8') as f:
f.write(f"\n\n=== 生成时间: {time.strftime('%Y-%m-%d %H:%M:%S')} ===\n")
f.write(results)
print(f"结果已保存到: {filepath}")
if __name__ == "__main__":
generator = LotteryGenerator()
# 生成5注大乐透和双色球
dlt_results = "\n".join([generator.generate_dlt() for _ in range(5)])
ssq_results = "\n".join([generator.generate_ssq() for _ in range(5)])
full_output = f"大乐透:\n{dlt_results}\n\n双色球:\n{ssq_results}"
print(full_output)
save_results(full_output)
这个版本改进了几个关键点:
pathlib处理文件路径,更安全且跨平台为了让脚本能在没有Python环境的电脑上运行,我们可以将其打包为exe文件。首先安装PyInstaller:
bash复制pip install pyinstaller
然后执行打包命令:
bash复制pyinstaller --onefile --windowed lottery_generator.py
参数说明:
--onefile:生成单个可执行文件--windowed:不显示控制台窗口(适合后台运行)打包完成后,exe文件会出现在dist目录下。你可以将此文件复制到任何位置运行。
注意:首次打包可能会比较慢,因为PyInstaller需要收集所有依赖项。如果遇到缺失模块的错误,可能需要手动安装相应包后再试。
实现自动化的最后一步是配置定时任务。按Win+R,输入taskschd.msc打开任务计划程序:
点击右侧"创建任务"
在"常规"选项卡中:
在"触发器"选项卡中:
在"操作"选项卡中:
在"条件"选项卡中:
在"设置"选项卡中:
配置完成后,系统就会按照设定时间自动运行你的选号程序了。你可以在任务计划程序库中右键任务选择"运行"来立即测试。
基础功能已经实现,但我们可以进一步优化:
添加邮件通知功能
python复制import smtplib
from email.mime.text import MIMEText
def send_email(content, to_email):
msg = MIMEText(content)
msg['Subject'] = '最新彩票选号结果'
msg['From'] = 'your_email@example.com'
msg['To'] = to_email
with smtplib.SMTP('smtp.example.com', 587) as server:
server.starttls()
server.login('your_email@example.com', 'your_password')
server.send_message(msg)
添加命令行参数支持
python复制import argparse
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('--count', type=int, default=5, help='生成注数')
parser.add_argument('--email', help='接收结果的邮箱地址')
return parser.parse_args()
if __name__ == "__main__":
args = parse_args()
generator = LotteryGenerator()
dlt_results = "\n".join([generator.generate_dlt() for _ in range(args.count)])
ssq_results = "\n".join([generator.generate_ssq() for _ in range(args.count)])
full_output = f"大乐透:\n{dlt_results}\n\n双色球:\n{ssq_results}"
if args.email:
send_email(full_output, args.email)
else:
print(full_output)
save_results(full_output)
现在你可以通过命令行参数控制生成注数和接收邮箱了:
bash复制lottery_generator.exe --count 10 --email your@email.com
权限问题
如果任务计划程序无法启动你的脚本,尝试:
路径问题
当脚本作为任务运行时,当前工作目录可能不同。修改代码使用绝对路径:
python复制import os
script_dir = os.path.dirname(os.path.abspath(__file__))
output_path = os.path.join(script_dir, 'results.txt')
日志记录
添加日志功能帮助调试:
python复制import logging
logging.basicConfig(
filename='lottery.log',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
try:
# 你的代码
except Exception as e:
logging.error(f"运行出错: {str(e)}")
性能优化
如果脚本运行时间较长,可以考虑:
random.choices替代random.sample(不保证唯一性但更快)python复制from multiprocessing import Pool
def generate_multiple(count):
with Pool() as p:
return p.map(generator.generate_dlt, [None]*count)
这个项目展示了如何将一个简单的Python脚本发展为完整的自动化解决方案。从基础功能开发到打包部署,再到定时任务设置,涵盖了Python自动化实践的多个关键环节。