import tkinter as tk
from tkinter import messagebox, scrolledtext
import numpy as np
import math

def calculate_statistics():
    # 获取用户输入的字符串，并转换为数字列表
    data_str = entry.get()
    try:
        # 支持逗号、空格分隔的数字
        data = [float(x.strip()) for x in data_str.replace(',', ' ').split() if x.strip()]
        if len(data) < 2:
            messagebox.showerror("输入错误", "请输入至少两个数字")
            return
        
        # 计算统计量
        mean = np.mean(data)
        median = np.median(data)
        std_dev = np.std(data)
        variance = np.var(data)
        data_min = np.min(data)
        data_max = np.max(data)
        data_range = data_max - data_min
        data_sum = np.sum(data)
        
        # 显示结果
        result_text = f"输入数据: {data}\n\n"
        result_text += f"统计结果:\n"
        result_text += f"平均值 (mean): {mean:.4f}\n"
        result_text += f"中位数 (median): {median:.4f}\n"
        result_text += f"标准差 (std): {std_dev:.4f}\n"
        result_text += f"方差 (variance): {variance:.4f}\n"
        result_text += f"最小值 (min): {data_min}\n"
        result += f"最大值 (max): {data_max}\n"
        result_text += f"极差 (range): {data_range}\n"
        result_text += f"总和 (sum): {data_sum}\n"
        
        # 显示数学公式
        result_text += "\n相关数学公式:\n"
        result_text += f"平均值公式: μ = (∑xᵢ) / n\n"
        result_text += f"方差公式: σ² = ∑(xᵢ - μ)² / n\n"
        result_text += f"标准差公式: σ = √(方差)\n"
        result_text += f"中位数: 数据排序后的中间值\n"
        
        # 插入到文本区域
        output.delete(1.0, tk.END)
        output.insert(tk.END, result_text)
        
    except ValueError:
        messagebox.showerror("输入错误", "请输入有效的数字，用空格或逗号分隔")

# 创建主窗口
root = tk.Tk()
root.title("数学公式统计工具")
root.geometry("600x500")

# 输入标签和输入框
tk.Label(root, text="请输入数字（用空格或逗号分隔）:", font=("Arial", 12)).pack(pady=10)
entry = tk.Entry(root, width=50, font=("Arial", 12))
entry.pack(pady=5)

# 计算按钮
calc_button = tk.Button(root, text="计算统计量", command=calculate_statistics, font=("Arial", 12), bg="#4CAF50", fg="white")
calc_button.pack(pady=10)

# 显示结果的滚动文本框
output = scrolledtext.ScrolledText(root, width=70, height=20, font=("Courier", 11))
output.pack(pady=10, padx=10)

# 运行主循环
root.mainloop()