闲来无事,就把之前给学生讲到随机数知识点做的一个猜数字游戏案例。通过ai来加持增加了UI界面,然后给反馈了几次需求最终写出来了。打包好的成品EXE在文章底部下载即可(温馨提示:一定要把杀毒关闭掉,不然会误报)!!!
演示效果:

成品代码:
import tkinter as tk
from tkinter import ttk, messagebox
import random
# 初始化窗口
root = tk.Tk()
root.title("猜数字游戏")
root.geometry("600x400")
# 创建自适应布局
root.grid_rowconfigure((0, 1, 2, 3, 4, 5, 6, 7), weight=1)
root.grid_columnconfigure((0, 1, 2), weight=1)
# 变量声明
min_var = tk.IntVar(value=1) # 最小值,默认为1
max_var = tk.IntVar(value=100) # 最大值,默认为100
guess_var = tk.IntVar() # 用户猜测的数字
target_number = random.randint(min_var.get(), max_var.get()) # 生成目标数字
result_label_text = tk.StringVar(value="请输入你的猜测") # 结果标签的文本
last_guess_text = tk.StringVar(value="上一次猜测: 无") # 上一次猜测的数字
# 定义猜数字函数
def check_guess():
global target_number
guess = guess_var.get()
# 检查猜测数字是否在设定范围内
if guess < min_var.get() or guess > max_var.get():
messagebox.showwarning("警告", f"请输入一个在{min_var.get()}到{max_var.get()}之间的数字")
return
last_guess_text.set(f"上一次猜测: {guess}") # 更新上一次猜测的数字显示
if guess < target_number:
result_label_text.set("数字小了哟")
elif guess > target_number:
result_label_text.set("数字大了哟")
else:
result_label_text.set("恭喜你,猜中了")
show_result_dialog() # 展示结果对话框
# 展示结果对话框
def show_result_dialog():
result = messagebox.askquestion("恭喜", "你猜对了数字!\n你想继续游戏吗?")
if result == 'yes':
reset_game() # 重新开始游戏
else:
root.quit() # 退出游戏
# 重新开始游戏
def reset_game():
global target_number
target_number = random.randint(min_var.get(), max_var.get())
result_label_text.set("请输入你的猜测")
last_guess_text.set(f"上一次猜测: 无") # 清除上一次猜测的数字显示
# 设置最小值的输入框
min_label = ttk.Label(root, text="最小值", font=("Helvetica", 12))
min_label.grid(row=0, column=0, padx=20, pady=10, sticky="e")
min_entry = ttk.Entry(root, textvariable=min_var, width=15)
min_entry.grid(row=0, column=1, padx=20, pady=10)
# 设置最大值的输入框
max_label = ttk.Label(root, text="最大值", font=("Helvetica", 12))
max_label.grid(row=1, column=0, padx=20, pady=10, sticky="e")
max_entry = ttk.Entry(root, textvariable=max_var, width=15)
max_entry.grid(row=1, column=1, padx=20, pady=10)
# 设置用户输入猜测的框架
guess_frame = ttk.Frame(root)
guess_frame.grid(row=2, column=0, columnspan=3, padx=20, pady=10)
guess_label = ttk.Label(guess_frame, text="猜一个数字", font=("Helvetica", 12))
guess_label.pack(side=tk.LEFT, padx=5, pady=5)
guess_entry = ttk.Entry(guess_frame, textvariable=guess_var, width=15)
guess_entry.pack(side=tk.LEFT, padx=5, pady=5)
# 创建猜数字按钮
guess_button = ttk.Button(root, text="猜数字", command=check_guess, width=30)
guess_button.grid(row=3, column=0, columnspan=3, padx=20, pady=10)
# 结果显示标签
result_label = ttk.Label(root, textvariable=result_label_text, font=("Helvetica", 16))
result_label.grid(row=4, column=0, columnspan=3, padx=20, pady=10)
# 上一次猜测显示标签
last_guess_label = ttk.Label(root, textvariable=last_guess_text, font=("Helvetica", 14), borderwidth=2, relief="ridge")
last_guess_label.grid(row=5, column=0, columnspan=3, padx=20, pady=10)
# 设置重置范围的函数
def reset_range():
global target_number
try:
min_value = min_var.get()
max_value = max_var.get()
if min_value >= max_value:
raise ValueError("最小值必须小于最大值")
target_number = random.randint(min_value, max_value)
result_label_text.set("请输入你的猜测")
last_guess_text.set(f"上一次猜测: 无") # 清除上一次猜测的数字显示
messagebox.showinfo("成功", "范围已重置")
except ValueError as e:
messagebox.showerror("错误", str(e))
# 创建重置范围按钮
reset_button = ttk.Button(root, text="重置范围", command=reset_range, width=30)
reset_button.grid(row=6, column=0, columnspan=3, padx=20, pady=10)
# 运行主循环
root.mainloop()
代码注释版:
import tkinter as tk # 导入 tkinter 模块,用于创建图形用户界面
from tkinter import ttk, messagebox # 导入 ttk 组件和消息框
import random # 导入 random 模块,用于生成随机数
# 初始化窗口
root = tk.Tk() # 创建主窗口
root.title("猜数字游戏") # 设置窗口标题
root.geometry("600x400") # 设置窗口大小为600x400像素
# 创建自适应布局
root.grid_rowconfigure((0, 1, 2, 3, 4, 5, 6, 7), weight=1) # 设置行的权重,使其自适应大小
root.grid_columnconfigure((0, 1, 2), weight=1) # 设置列的权重,使其自适应大小
# 变量声明
min_var = tk.IntVar(value=1) # 最小值,默认为1
max_var = tk.IntVar(value=100) # 最大值,默认为100
guess_var = tk.IntVar() # 用户猜测的数字
target_number = random.randint(min_var.get(), max_var.get()) # 生成在指定范围内的目标数字
result_label_text = tk.StringVar(value="请输入你的猜测") # 结果标签的文本,初始提示
last_guess_text = tk.StringVar(value="上一次猜测: 无") # 上一次猜测的数字,初始状态
# 设置最小值的输入框
min_label = ttk.Label(root, text="最小值", font=("Helvetica", 12)) # 创建最小值标签
min_label.grid(row=0, column=0, padx=20, pady=10, sticky="e") # 将标签放置在网格的特定位置
min_entry = ttk.Entry(root, textvariable=min_var, width=15) # 创建最小值输入框
min_entry.grid(row=0, column=1, padx=20, pady=10) # 将输入框放置在网格的特定位置
# 设置最大值的输入框
max_label = ttk.Label(root, text="最大值", font=("Helvetica", 12)) # 创建最大值标签
max_label.grid(row=1, column=0, padx=20, pady=10, sticky="e") # 将标签放置在网格的特定位置
max_entry = ttk.Entry(root, textvariable=max_var, width=15) # 创建最大值输入框
max_entry.grid(row=1, column=1, padx=20, pady=10) # 将输入框放置在网格的特定位置
# 设置用户输入猜测的框架
guess_frame = ttk.Frame(root) # 创建一个框架来容纳猜测相关的控件
guess_frame.grid(row=2, column=0, columnspan=3, padx=20, pady=10) # 将框架放置在网格的特定位置
guess_label = ttk.Label(guess_frame, text="猜一个数字", font=("Helvetica", 12)) # 创建猜测标签
guess_label.pack(side=tk.LEFT, padx=5, pady=5) # 将标签放置在框架的左侧
guess_entry = ttk.Entry(guess_frame, textvariable=guess_var, width=15) # 创建用户输入的猜测输入框
guess_entry.pack(side=tk.LEFT, padx=5, pady=5) # 将输入框放置在框架的左侧
# 创建猜数字按钮
guess_button = ttk.Button(root, text="猜数字", command=check_guess, width=30) # 创建按钮并绑定猜测函数
guess_button.grid(row=3, column=0, columnspan=3, padx=20, pady=10) # 将按钮放置在网格的特定位置
# 结果显示标签
result_label = ttk.Label(root, textvariable=result_label_text, font=("Helvetica", 16)) # 创建结果标签
result_label.grid(row=4, column=0, columnspan=3, padx=20, pady=10) # 将标签放置在网格的特定位置
# 上一次猜测显示标签
last_guess_label = ttk.Label(root, textvariable=last_guess_text, font=("Helvetica", 14), borderwidth=2, relief="ridge") # 创建上一次猜测的标签
last_guess_label.grid(row=5, column=0, columnspan=3, padx=20, pady=10) # 将标签放置在网格的特定位置
# 猜数字函数
def check_guess():
global target_number # 使用全局变量 target_number
guess = guess_var.get() # 获取用户的猜测
# 检查猜测数字是否在设定范围内
if guess < min_var.get() or guess > max_var.get():
messagebox.showwarning("警告", f"请输入一个在{min_var.get()}到{max_var.get()}之间的数字") # 弹出警告框提示
return
last_guess_text.set(f"上一次猜测: {guess}") # 更新上一次猜测的数字显示
if guess < target_number:
result_label_text.set("数字小了哟") # 提示用户数字小了
elif guess > target_number:
result_label_text.set("数字大了哟") # 提示用户数字大了
else:
result_label_text.set("恭喜你,猜中了") # 提示用户猜中
show_result_dialog() # 展示结果对话框
# 展示结果对话框
def show_result_dialog():
result = messagebox.askquestion("恭喜", "你猜对了数字!\n你想继续游戏吗?") # 弹出选择框
if result == 'yes':
reset_game() # 继续游戏
else:
root.quit() # 退出游戏
# 重新开始游戏
def reset_game():
global target_number # 使用全局变量 target_number
target_number = random.randint(min_var.get(), max_var.get()) # 生成新的目标数字
result_label_text.set("请输入你的猜测") # 提示用户输入猜测
last_guess_text.set(f"上一次猜测: 无") # 清除上一次猜测的数字显示
# 设置重置范围的函数
def reset_range():
global target_number # 使用全局变量 target_number
try:
min_value = min_var.get() # 获取最小值
max_value = max_var.get() # 获取最大值
if min_value >= max_value:
raise ValueError("最小值必须小于最大值") # 检查最小值是否小于最大值
target_number = random.randint(min_value, max_value) # 重新生成目标数字
result_label_text.set("请输入你的猜测") # 提示用户输入猜测
last_guess_text.set(f"上一次猜测: 无") # 清除上一次猜测的数字显示
messagebox.showinfo("成功", "范围已重置") # 弹出提示框
except ValueError as e:
messagebox.showerror("错误", str(e)) # 弹出错误提示框
# 创建重置范围按钮
reset_button = ttk.Button(root, text="重置范围", command=reset_range, width=30) # 创建重置按钮
reset_button.grid(row=6, column=0, columnspan=3, padx=20, pady=10) # 将按钮放置在网格的特定位置
# 运行主循环
root.mainloop() # 启动事件循环,使窗口保持开放
本站https://ygz.ink文章https://ygz.ink/archives/1469.html中提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。本站部分信息来自博主网络收集整理,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序和内容,请支持正版,购买注册,得到更好的正版服务。我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!
邮箱:gouweicaosheji@163.com
宗宗酱
