import tkinter as tk
from tkinter import ttk, messagebox
import random

class MathPracticeApp:
    def __init__(self, root):
        self.root = root
        self.root.title("计算小能手 — 数学练习器")
        self.root.geometry("520x380")

        # 模式：0=四则运算，1=九九乘法
        self.mode = 0
        self.score = 0
        self.total = 0
        self.num1 = 0
        self.num2 = 0
        self.answer = 0
        self.question_text = tk.StringVar()

        # 顶部模式选择
        frame_top = ttk.Frame(root, padding=8)
        frame_top.pack(fill=tk.X)
        ttk.Button(frame_top, text="四则运算练习", command=self.set_mode_4).pack(side=tk.LEFT, padx=5)
        ttk.Button(frame_top, text="九九乘法表", command=self.set_mode_99).pack(side=tk.LEFT, padx=5)
        ttk.Button(frame_top, text="下一题", command=self.next_question).pack(side=tk.LEFT, padx=5)

        # 题目显示区域
        frame_q = ttk.Frame(root, padding=12)
        frame_q.pack()
        ttk.Label(frame_q, textvariable=self.question_text, font=("微软雅黑",24)).pack(pady=15)

        # 输入答案
        frame_input = ttk.Frame(root)
        frame_input.pack()
        ttk.Label(frame_input, text="你的答案：", font=("微软雅黑",14)).grid(row=0,column=0,padx=5)
        self.var_input = tk.StringVar()
        self.entry_ans = ttk.Entry(frame_input, textvariable=self.var_input, font=("微软雅黑",16), width=10)
        self.entry_ans.grid(row=0,column=1)
        self.entry_ans.bind("<Return>", self.check_answer) #按回车提交答案
        ttk.Button(frame_input, text="提交答案", command=self.check_answer).grid(row=0,column=2,padx=8)

        # 得分统计
        frame_stat = ttk.Frame(root,padding=15)
        frame_stat.pack()
        self.stat_text = tk.StringVar(value=f"得分：0 | 总题数：0")
        ttk.Label(frame_stat, textvariable=self.stat_text, font=("微软雅黑",13)).pack()

        # 结果提示
        self.result_msg = tk.StringVar(value="请开始做题！")
        ttk.Label(root, textvariable=self.result_msg, font=("微软雅黑",14), foreground="#222222").pack(pady=10)

        # 生成第一道题目
        self.next_question()

    def set_mode_4(self):
        """切换四则运算模式"""
        self.mode = 0
        self.reset_stats()
        self.next_question()

    def set_mode_99(self):
        """切换九九乘法模式"""
        self.mode = 1
        self.reset_stats()
        self.next_question()

    def reset_stats(self):
        self.score = 0
        self.total = 0
        self.stat_text.set(f"得分：0 | 总题数：0")
        self.result_msg.set("已切换模式，请答题")

    def next_question(self):
        """生成下一道题目"""
        self.var_input.set("")
        self.result_msg.set("")
        if self.mode == 0:
            # 四则运算，加减乘，除法保证整除
            op_list = ["+","-","*","/"]
            op = random.choice(op_list)
            if op == "/":
                self.num2 = random.randint(1,12)
                self.answer = random.randint(1,12)
                self.num1 = self.num2 * self.answer
            elif op == "-":
                self.num1 = random.randint(0,30)
                self.num2 = random.randint(0,self.num1)
                self.answer = self.num1 - self.num2
            elif op == "+":
                self.num1 = random.randint(0,30)
                self.num2 = random.randint(0,30)
                self.answer = self.num1 + self.num2
            else: #乘法
                self.num1 = random.randint(1,12)
                self.num2 = random.randint(1,12)
                self.answer = self.num1 * self.num2
            self.question_text.set(f"{self.num1} {op} {self.num2} = ?")
        else:
            #九九乘法表
            self.num1 = random.randint(1,9)
            self.num2 = random.randint(1,9)
            self.answer = self.num1 * self.num2
            self.question_text.set(f"{self.num1} × {self.num2} = ?")

    def check_answer(self,event=None):
        """校验答案"""
        user_str = self.var_input.get().strip()
        if not user_str.isdigit():
            self.result_msg.set("⚠️请输入数字！")
            return
        user_ans = int(user_str)
        self.total +=1
        if user_ans == self.answer:
            self.score +=1
            self.result_msg.set("✅回答正确！")
        else:
            self.result_msg.set(f"❌答错！正确答案是：{self.answer}")
        self.stat_text.set(f"得分：{self.score} | 总题数：{self.total} 正确率：{100*self.score/self.total:.1f}%")


if __name__ == "__main__":
    win = tk.Tk()
    app = MathPracticeApp(win)
    win.mainloop()