人数抽签随机分组(deepseek+cursor版本)
用cursor+deepseek v3自动生成的UI界面的版本,感觉还不错。
·
用cursor+deepseek v3自动生成的UI界面的版本,感觉还不错
import random
import tkinter as tk
from tkinter import ttk, messagebox, scrolledtext, filedialog
# 常见姓氏列表
surnames = [
'王', '李', '张', '刘', '陈', '杨', '赵', '黄', '周', '吴',
'徐', '孙', '胡', '朱', '高', '林', '何', '郭', '马', '罗'
]
# 常见名字列表(单字)
given_names = [
'伟', '芳', '娜', '敏', '静', '秀英', '丽', '强', '磊', '军',
'洋', '勇', '艳', '杰', '娟', '涛', '明', '超', '秀兰', '霞',
'平', '刚', '桂英', '芳芳', '波', '秀珍', '健', '秀梅', '宁', '红梅'
]
def generate_unique_names(total_people):
"""
生成不重复的中国人习惯的名字
:param total_people: 总人数
:return: 不重复的名字列表
"""
names = set()
while len(names) < total_people:
surname = random.choice(surnames)
given_name = random.choice(given_names)
full_name = f"{surname}{given_name}"
names.add(full_name)
return list(names)
def assign_groups(total_people, num_groups):
"""
将人群随机分到 N 组中,并为每个组别中的人分配抽签号
:param total_people: 总人数
:param num_groups: 组数
:return: 分组结果(字典形式)
"""
# 生成不重复的名字列表
names = generate_unique_names(total_people)
random.shuffle(names) # 随机打乱顺序
# 初始化分组
groups = {i: [] for i in range(1, num_groups + 1)}
# 分配人员到组中
for index, name in enumerate(names):
group_number = (index % num_groups) + 1
groups[group_number].append(name)
# 为每个组别中的人分配抽签号
for group_number, members in groups.items():
random.shuffle(members) # 组内随机排序
for i, name in enumerate(members, start=1):
groups[group_number][i - 1] = f"{name} (抽签号: {i})"
return groups
def on_submit():
"""
处理提交按钮点击事件
"""
try:
total_people = int(entry_people.get())
num_groups = int(entry_groups.get())
if total_people <= 0 or num_groups <= 0:
messagebox.showerror("错误", "人数和组数必须大于 0")
return
if num_groups > total_people:
messagebox.showerror("错误", "组数不能大于总人数")
return
# 分配组别
groups = assign_groups(total_people, num_groups)
# 显示分组结果
result_text.delete(1.0, tk.END) # 清空文本框
for group_number, members in groups.items():
result_text.insert(tk.END, f"组 {group_number}:\n")
result_text.insert(tk.END, "\n".join(members) + "\n\n")
except ValueError:
messagebox.showerror("错误", "请输入有效的数字")
def export_results():
"""
导出分组结果为文本文件
"""
# 获取分组结果
results = result_text.get(1.0, tk.END)
if not results.strip():
messagebox.showerror("错误", "没有分组结果可导出")
return
# 选择保存路径
file_path = filedialog.asksaveasfilename(
defaultextension=".txt",
filetypes=[("Text Files", "*.txt")],
title="保存分组结果"
)
if not file_path:
return
# 写入文件
with open(file_path, "w", encoding="utf-8") as file:
file.write(results)
messagebox.showinfo("成功", f"分组结果已保存到 {file_path}")
# 创建主窗口
root = tk.Tk()
root.title("分组工具")
root.geometry("600x500")
root.configure(bg="#f0f0f0")
# 设置字体
font_title = ("Helvetica", 18, "bold")
font_label = ("Helvetica", 12)
font_button = ("Helvetica", 12, "bold")
# 设置渐变背景
canvas = tk.Canvas(root, width=600, height=500, highlightthickness=0)
canvas.pack(fill="both", expand=True)
canvas.create_rectangle(0, 0, 600, 500, fill="#6a11cb", outline="#6a11cb") # 紫色渐变
canvas.create_rectangle(0, 0, 600, 500, fill="#2575fc", outline="#2575fc") # 蓝色渐变
canvas.create_rectangle(0, 0, 600, 500, fill="#6a11cb", outline="#6a11cb") # 紫色渐变
# 标题
title_label = tk.Label(root, text="分组工具", font=font_title, bg="#6a11cb", fg="#ffffff")
title_label.place(relx=0.5, rely=0.1, anchor="center")
# 输入框框架
input_frame = tk.Frame(root, bg="#ffffff", bd=2, relief="groove")
input_frame.place(relx=0.5, rely=0.3, anchor="center", width=400, height=100)
# 输入总人数
label_people = tk.Label(input_frame, text="总人数:", font=font_label, bg="#ffffff", fg="#333333")
label_people.grid(row=0, column=0, padx=10, pady=10)
entry_people = ttk.Entry(input_frame, font=font_label, width=20)
entry_people.grid(row=0, column=1, padx=10, pady=10)
# 输入组数
label_groups = tk.Label(input_frame, text="组数:", font=font_label, bg="#ffffff", fg="#333333")
label_groups.grid(row=1, column=0, padx=10, pady=10)
entry_groups = ttk.Entry(input_frame, font=font_label, width=20)
entry_groups.grid(row=1, column=1, padx=10, pady=10)
# 按钮框架
button_frame = tk.Frame(root, bg="#ffffff", bd=2, relief="groove")
button_frame.place(relx=0.5, rely=0.45, anchor="center", width=400, height=60)
# 提交按钮
submit_button = ttk.Button(button_frame, text="分组", command=on_submit, style="Accent.TButton")
submit_button.grid(row=0, column=0, padx=10, pady=10)
# 导出按钮
export_button = ttk.Button(button_frame, text="导出结果", command=export_results, style="Accent.TButton")
export_button.grid(row=0, column=1, padx=10, pady=10)
# 显示分组结果
result_text = scrolledtext.ScrolledText(root, width=60, height=15, font=font_label, bg="#ffffff", fg="#333333")
result_text.place(relx=0.5, rely=0.75, anchor="center", width=550, height=200)
# 设置按钮样式
style = ttk.Style()
style.configure("Accent.TButton", font=font_button, background="#2575fc", foreground="#ffffff")
# 运行主循环
root.mainloop()
更多推荐


所有评论(0)