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

Python Tkinter猜数字游戏while循环与条件判断异常求助

问题分析

你的代码核心问题出在Guess()函数里的while循环:

  • 每次点击"player 2 guess number"按钮时,你只获取了一次输入框里的数字a,然后在while循环里反复用这个固定的a和correct比较,直到sam累加到10,所以会连续输出10次相同的提示。
  • 同时,这个while循环会卡住tkinter的主事件循环,导致界面无法响应其他操作。
修复方案

把循环逻辑去掉,改成每次点击按钮只处理一次猜测操作,具体改动如下:

  1. 移除Guess()里的while循环,改为单次判断
  2. 每次处理猜测前先检查剩余次数,次数用完直接提示失败
  3. 猜对后可以禁用按钮防止重复操作,或者重置游戏状态
修改后的完整代码
from tkinter import * 
sam = 0
correct = 0  # 提前初始化全局变量

def get_1():
    global correct
    try:
        correct = int(player1.get())
        player1.pack_forget()
        sumbit.pack_forget()
    except ValueError:
        print("请输入有效数字!")  # 增加输入合法性判断

def Guess():
    global sam
    # 先检查是否已经用完次数
    if sam >= 10:
        print("次数已用完,你输了")
        return
    
    try:
        a = int(player_2.get())
    except ValueError:
        print("请输入有效数字!")
        return
    
    if a == correct:
        print("你赢了!")
        guss.config(state=DISABLED)  # 猜对后禁用按钮,防止重复点击
    elif a > correct:
        print(f"{a} 太大了")
        sam += 1
    elif a < correct:
        print(f"{a} 太小了")
        sam += 1
    
    # 每次操作后检查剩余次数
    if sam >= 10:
        print("次数已用完,你输了")
        guss.config(state=DISABLED)

app = Tk()
app.title("猜数字游戏")
app.minsize(300,300)

player1 = Entry(app, font=20)
player1.pack(pady=10)
player_2 = Entry(app, font=20)
player_2.pack(pady=10)

sumbit = Button(app, font=10, text="玩家1提交数字", command=get_1)
sumbit.pack(pady=5)
guss = Button(app, text="玩家2猜数字", font=20, command=Guess)
guss.pack(pady=10)

app.mainloop()
关键改动说明
  • 移除了Guess()里的while循环,改为每次点击按钮只处理一次猜测,符合tkinter事件驱动的逻辑
  • 增加了输入合法性判断,防止用户输入非数字导致报错
  • 猜对或次数用完后禁用猜数字按钮,避免无效操作
  • 每次猜错后才累加sam,并实时检查剩余次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 19:35:28