# 天气预测小游戏开发技术博客


背景介绍

本项目旨在通过简单的编程实现一个天气预测小游戏,用户可通过输入日期和地理位置,系统自动读取天气数据并生成预测结果。项目使用Python与Flask框架构建本地开发环境,确保代码可运行且具备良好的可维护性。

技术思路

核心设计

  1. 数据结构
    • 使用datetime模块处理日期输入
    • 存储天气数据至本地文件(如weather_data.json
  2. 核心算法
    • 日期格式验证
    • 天气数据解析与存储

代码实现

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语句确保文件读写时的资源管理
  • 返回格式化后的天气信息字符串

示例运行

  1. 在本地开发环境中创建并运行Flask应用
  2. 访问`http://localhost:5000/get_weather`获取天气信息
  3. 输入示例输出:
    json
    {
    "date": "2023-10-15",
    "location": "北京",
    "forecast": "日期:2023-10-15 | 天气情况:北京 | 天气预报:22°C"
    }

总结

本项目通过Flask框架实现了天气预测游戏的核心功能,实现了日期输入验证、数据保存和天气信息解析。代码具备良好的可维护性,能够处理日期格式验证和本地文件读写问题,最终输出符合预期的天气信息。该项目展示了Python在数据处理和Web开发中的实际应用价值。