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

Python Tkinter数学测验游戏:计分与新题更新故障求助

数学测验游戏问题修复方案

问题1:题目无法更新到question_label

原因:随机数a、b仅在程序启动时生成一次,点击按钮后未重新生成新随机数,也未调用标签的更新方法刷新文本。

问题2:计分仅能统计一次

原因:更新分数后未调用标签的更新方法刷新显示,或计分变量因作用域问题被重复初始化。


修复后的完整代码

import tkinter as tk
import random

root = tk.Tk()
root.title("数学测验游戏")

# 初始化全局变量
score = 0
a = 0
b = 0

# 生成新题并更新标签
def generate_new_question():
    global a, b
    a = random.randint(1, 10)
    b = random.randint(1, 10)
    question_label.config(text=f"{a} + {b} = ?")

# 校验答案、更新计分、生成新题
def check_answer():
    global score
    try:
        answer = int(answer_entry.get())
        # 校验答案并更新分数
        if answer == a + b:
            score += 1
        else:
            score -= 1  # 答错扣分,不需要可删除此行
        # 刷新分数显示
        score_label.config(text=f"分数: {score}")
        # 清空输入框
        answer_entry.delete(0, tk.END)
        # 生成新题
        generate_new_question()
    except ValueError:
        question_label.config(text="请输入有效数字!")

# 创建UI组件
question_label = tk.Label(root, font=("Arial", 16))
question_label.pack(pady=20)

answer_entry = tk.Entry(root, font=("Arial", 16), width=5)
answer_entry.pack(pady=10)

score_label = tk.Label(root, text=f"分数: {score}", font=("Arial", 14))
score_label.pack(pady=10)

enter_btn = tk.Button(root, text="Enter", font=("Arial", 14), command=check_answer)
enter_btn.pack(pady=10)

# 启动时生成第一题
generate_new_question()

root.mainloop()

关键修改点

  • 新增generate_new_question()函数,专门负责生成随机数并调用question_label.config()更新题目文本,每次点击Enter后触发。
  • 在check_answer()中,更新分数后立即调用score_label.config()刷新分数显示。
  • 使用global关键字确保函数能修改全局的score、a、b变量,避免局部变量覆盖全局变量。
  • 程序启动时主动调用generate_new_question()生成初始题目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:30:43