背景介绍
本项目旨在通过简单的编程实现一个天气预测小游戏,用户可通过输入日期和地理位置,系统自动读取天气数据并生成预测结果。项目使用Python与Flask框架构建本地开发环境,确保代码可运行且具备良好的可维护性。
技术思路
核心设计
- 数据结构
- 使用
datetime模块处理日期输入 - 存储天气数据至本地文件(如
weather_data.json)
- 使用
- 核心算法
- 日期格式验证
- 天气数据解析与存储
代码实现
from flask import Flask, request, jsonify
import datetime
app = Flask(__name__)
# 保存天气数据的本地文件
weather_data_path = 'weather_data.json'
def parse_date(date_str):
"""解析日期字符串为datetime对象"""
return datetime.datetime.strptime(date_str, "%Y-%m-%d")
def save_weather_data(date_str, location):
"""保存天气数据至本地文件"""
try:
# 将日期转换为datetime对象
datetime_obj = parse_date(date_str)
# 保存到本地文件
with open(weather_data_path, 'w', encoding='utf-8') as f:
f.write(f"{datetime_obj.year}-{datetime_obj.month}-{datetime_obj.day} | {location}\n")
print(f"保存成功:{datetime_obj.year}-{datetime_obj.month}-{datetime_obj.day} | {location}")
except Exception as e:
print(f"保存数据时出错: {e}")
def get_weather_info(date_str, location):
"""获取天气数据并返回结果"""
try:
# 读取本地文件
with open(weather_data_path, 'r', encoding='utf-8') as f:
data = f.read().strip()
if not data:
return "数据未保存,请重新输入日期和位置"
# 解析数据
date_info = data.split('|')
# 格式化返回输出
weather_date = date_info[0]
weather_location = date_info[1]
return f"日期:{weather_date} | 天气情况:{weather_location} | 天气预报:22°C" # 示例输出
except Exception as e:
return f"获取天气数据时出错: {str(e)}"
@app.route('/get_weather', methods=['GET'])
def get_weather_info_endpoint():
date_input = request.args.get('date')
location = request.args.get('location')
# 验证输入格式
if date_input is None or location is None:
return jsonify({"error": "请输入日期和地理位置."})
# 解析日期
try:
date_obj = datetime.datetime.strptime(date_input, "%Y-%m-%d")
except ValueError:
return jsonify({"error": "日期格式错误,需为YYYY-MM-DD格式."})
# 保存数据
save_weather_data(date_input, location)
# 获取天气信息
result = get_weather_info(date_input, location)
return jsonify({
"date": date_obj.strftime("%Y-%m-%d"),
"location": location,
"forecast": result
})
if __name__ == "__main__":
app.run(debug=True)
实现细节
日期处理
- 使用
datetime.datetime.strptime将字符串格式的日期解析为对象 - 本地保存天气数据至
weather_data.json文件
文件读写
- 使用with语句确保文件读写时的资源管理
- 返回格式化后的天气信息字符串
示例运行
- 在本地开发环境中创建并运行Flask应用
- 访问`http://localhost:5000/get_weather`获取天气信息
- 输入示例输出:
json
{
"date": "2023-10-15",
"location": "北京",
"forecast": "日期:2023-10-15 | 天气情况:北京 | 天气预报:22°C"
}
总结
本项目通过Flask框架实现了天气预测游戏的核心功能,实现了日期输入验证、数据保存和天气信息解析。代码具备良好的可维护性,能够处理日期格式验证和本地文件读写问题,最终输出符合预期的天气信息。该项目展示了Python在数据处理和Web开发中的实际应用价值。