You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Tkinter乘法表练习程序故障排查与功能完善求助

修复后的Python Tkinter乘法表练习程序

常见问题排查

原代码通常会因以下问题导致异常:

  • 新窗口控件初始化不当,变量作用域混乱
  • 答题次数、对错计数逻辑错误
  • 缺少输入合法性验证(如非数字输入)
  • 随机题目生成未绑定目标数字
  • 答题完成后未做状态锁定与结果提示

完整修复代码

import tkinter as tk
import tkinter.messagebox as messagebox
import random

class MultiplicationPractice:
    def __init__(self, root):
        self.root = root
        self.root.title("乘法表练习")
        
        # 主窗口布局
        tk.Label(root, text="输入要练习的数字:").pack(pady=10)
        self.num_entry = tk.Entry(root, width=10)
        self.num_entry.pack(pady=5)
        tk.Button(root, text="开始练习", command=self.start_practice).pack(pady=10)

    def start_practice(self):
        # 输入合法性校验
        try:
            self.target_num = int(self.num_entry.get())
            if not (1 <= self.target_num <= 12):
                messagebox.showerror("错误", "请输入1-12之间的整数")
                return
        except ValueError:
            messagebox.showerror("错误", "请输入有效的数字")
            return
        
        # 创建练习子窗口
        self.practice_win = tk.Toplevel(self.root)
        self.practice_win.title(f"{self.target_num}的乘法表练习")
        self.practice_win.resizable(False, False)
        
        # 初始化答题状态
        self.total_questions = 10
        self.current_q = 0
        self.correct = 0
        self.wrong = 0
        
        # 练习窗口控件
        self.question_label = tk.Label(self.practice_win, text="", font=("Arial", 16))
        self.question_label.pack(pady=20)
        
        self.answer_entry = tk.Entry(self.practice_win, width=10, font=("Arial", 14))
        self.answer_entry.pack(pady=5)
        self.answer_entry.bind("<Return>", self.check_answer)  # 支持回车提交
        
        tk.Button(self.practice_win, text="提交答案", command=self.check_answer).pack(pady=10)
        
        self.result_label = tk.Label(self.practice_win, text="正确:0 | 错误:0", font=("Arial", 12))
        self.result_label.pack(pady=15)
        
        # 生成第一道题目
        self.generate_question()

    def generate_question(self):
        # 生成1-12之间的随机乘数
        self.multiplier = random.randint(1, 12)
        self.question_label.config(text=f"{self.target_num} × {self.multiplier} = ?")
        self.answer_entry.delete(0, tk.END)
        self.answer_entry.focus()

    def check_answer(self, event=None):
        if self.current_q >= self.total_questions:
            return
        
        # 验证答案输入
        try:
            user_ans = int(self.answer_entry.get())
        except ValueError:
            messagebox.showwarning("提示", "请输入有效的数字答案")
            return
        
        # 判断对错并更新计数
        correct_ans = self.target_num * self.multiplier
        if user_ans == correct_ans:
            self.correct += 1
            messagebox.showinfo("结果", "回答正确!")
        else:
            self.wrong += 1
            messagebox.showinfo("结果", f"回答错误,正确答案是{correct_ans}")
        
        # 更新计数显示
        self.result_label.config(text=f"正确:{self.correct} | 错误:{self.wrong}")
        
        self.current_q += 1
        
        # 判断是否完成所有题目
        if self.current_q < self.total_questions:
            self.generate_question()
        else:
            self.answer_entry.config(state=tk.DISABLED)
            messagebox.showinfo("练习结束", f"10道题已完成!\n正确:{self.correct} | 错误:{self.wrong}")

if __name__ == "__main__":
    root = tk.Tk()
    app = MultiplicationPractice(root)
    root.mainloop()

代码关键说明

  • 输入验证:确保用户输入1-12之间的有效整数,避免非法输入引发异常
  • 窗口管理:用Toplevel创建独立练习窗口,避免主窗口与子窗口控件冲突
  • 状态维护:通过类属性统一管理答题次数、对错计数,保证状态在函数间正确传递
  • 交互优化:支持回车提交答案,答题完成后锁定输入框并展示最终结果
  • 随机题目:每次生成1-12之间的随机乘数,保证习题的随机性

内容的提问来源于stack exchange,提问作者Kripersi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 07:03:37