Python Tkinter猜数字游戏while循环与条件判断异常求助
问题分析
你的代码核心问题出在Guess()函数里的while循环:
- 每次点击"player 2 guess number"按钮时,你只获取了一次输入框里的数字
a,然后在while循环里反复用这个固定的a和correct比较,直到sam累加到10,所以会连续输出10次相同的提示。 - 同时,这个
while循环会卡住tkinter的主事件循环,导致界面无法响应其他操作。
修复方案
把循环逻辑去掉,改成每次点击按钮只处理一次猜测操作,具体改动如下:
- 移除
Guess()里的while循环,改为单次判断 - 每次处理猜测前先检查剩余次数,次数用完直接提示失败
- 猜对后可以禁用按钮防止重复操作,或者重置游戏状态
修改后的完整代码
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
相关产品推荐
相关产品推荐

