用cursor,3分钟搞定年会抽奖程序

文摘   2025-01-21 11:43   广东  

你好,我是易安。年关将至,又到了准备年会的时候。作为一名技术人,与其用传统的抽奖工具,不如用代码来实现一个专属的抽奖程序。今天,我就用AI工具来帮我们高效完成这项任务。

一、问题定义:年会摇奖的需求

首先,明确需求是开发程序的第一步。我们需要一个可以:

1.实现一个简单的命令行抽奖程序

2.支持多轮抽奖(一等奖、二等奖、三等奖)

3.确保每人只能中奖一次

4.展示抽奖过程和结果

二、为什么选择Python?

Python是目前最流行的编程语言之一,广泛用于数据分析、自动化脚本、Web开发等领域。Python语法简单,学习成本低,非常适合快速开发小型程序,尤其是和AI工具结合使用时,能够充分发挥其强大的功能。

三、设计摇奖程序

  1. 数据准备:参与人员名单

假设我们已经有了一个参与人员的名单,可以是Excel表格、CSV文件或者简单的文本文件。我们通过Python读取数据,并将其转化为列表或数组格式,方便后续操作。

import random

# 假设这是我们从某处获取到的参与人员名单
participants = [
    "张三""李四""王五""赵六""孙七"
    "周八""钱九""孙十""李十一""张十二"
]
  1. 摇奖功能:随机抽取

我们可以利用Python的random模块来实现简单的随机抽取功能:

def draw_lottery(participants, num_winners=1):
    winners = random.sample(participants, num_winners)
    return winners

这个draw_lottery函数可以从participants列表中随机抽取指定数量的中奖者。

  1. 摇奖流程控制

如果有多个奖项,或者需要多次抽奖,我们可以把上述的抽奖功能封装成一个更复杂的流程:

def draw_multiple_lotteries(participants, num_prizes=3, winners_per_prize=1):
    all_winners = {}
    for prize in range(1, num_prizes + 1):
        winners = draw_lottery(participants, winners_per_prize)
        all_winners[f"奖项 {prize}"] = winners
        # 从名单中移除已中奖者,避免重复抽取
        participants = [p for p in participants if p not in winners]
    return all_winners

这里,draw_multiple_lotteries函数能完成多个奖项的摇奖,每个奖项可以设置不同的中奖人数,并确保每个参与者只能中奖一次。

  1. 输出结果

最终,我们需要将摇奖结果打印出来,或者保存到一个文件中:

def print_results(results):
    for prize, winners in results.items():
        print(f"{prize} 获奖者: {', '.join(winners)}")

# 调用摇奖功能
results = draw_multiple_lotteries(participants)
print_results(results)

四、利用AI工具提升功能

这里我先创建一个应用,命名为lucy_draw

利用Claude优化

上面是Claude给出来的版本,下面是源码,我一行代码都没有改:

import random
import time

class LuckyDraw:
    def __init__(self, employees, prizes):
        """
        初始化抽奖系统
        
        Args:
            employees (list): 参与抽奖的员工名单
            prizes (dict): 奖项设置,格式为 {奖项名称: 奖品数量}
        "
""
        self.employees = employees.copy()  # 创建员工名单副本
        self.prizes = prizes
        self.winners = {}  # 存储中奖记录
        
    def draw(self, prize_name):
        """
        进行一轮抽奖
        
        Args:
            prize_name (str): 奖项名称
        
        Returns:
            list: 本轮中奖者名单
        "
""
        if prize_name not in self.prizes:
            raise ValueError(f"未找到奖项:{prize_name}")
            
        num_winners = self.prizes[prize_name]
        if num_winners > len(self.employees):
            raise ValueError(f"奖品数量({num_winners})超过剩余参与人数({len(self.employees)})")
        
        # 抽奖过程展示
        print(f"\n开始抽取{prize_name}...")
        winners = []
        for i in range(num_winners):
            time.sleep(1)  # 增加抽奖过程的趣味性
            winner = random.choice(self.employees)
            winners.append(winner)
            self.employees.remove(winner)  # 确保不重复中奖
            print(f"恭喜 {winner} 获得 {prize_name}!")
        
        self.winners[prize_name] = winners
        return winners
    
    def display_results(self):
        """显示所有中奖结果"""
        print("\n========= 抽奖结果 =========")
        for prize, winners in self.winners.items():
            print(f"\n{prize}获得者:")
            for winner in winners:
                print(f"  - {winner}")
        print("\n==========================")

def main():
    # 示例数据
    employees = [
        "张三""李四""王五""赵六""钱七""孙八"
        "周九""吴十""郑十一""王十二""刘十三""陈十四"
    ]
    
    prizes = {
        "一等奖": 1,
        "二等奖": 2,
        "三等奖": 3
    }
    
    # 创建抽奖系统
    lucky_draw = LuckyDraw(employees, prizes)
    
    # 按奖项顺序抽奖
    try:
        lucky_draw.draw("三等奖")
        lucky_draw.draw("二等奖")
        lucky_draw.draw("一等奖")
        
        # 显示最终结果
        lucky_draw.display_results()
        
    except Exception as e:
        print(f"抽奖过程出错:{str(e)}")

if __name__ == "__main__":
    main()

我们看下能否正常运行?

没有压力,Claude模型不愧是最强AI编程模型,零次修改。

使用GPT-o1

这里用的是GPT最强推理模型O1,很快也给出来了它的实现,甚至还有详细的注释和代码解析:

我们看下实际运行情况?

显然它没有实现我的指定需求,没有多轮抽奖。

cursor登场

这里还是用我习惯的cursor,毕竟是直接接入的Claude Sonnet3.5,我用它来写一个完全版。

需求粘贴到codebase,一键apply。

运行效果也是没有问题,毕竟是用的Claude 3.5-sonnet模型

现在我来增加一些增强功能:

1.如何添加图形界面 2.如何加入抽奖动画效果 3.如何保存抽奖结果

输入给cursor,很快就拿到结果了

我们运行看下效果:

主要更新包括:

1.图形界面:

  • 使用 tkinter 创建了图形界面
  • 添加了开始抽奖和保存结果按钮
  • 使用 Canvas 组件显示动画效果
  • 使用 Text 组件显示抽奖结果

2.动画效果:

  • 在抽奖过程中显示名字快速切换的动画
  • 最终结果以较大字体居中显示
  • 可以调整 animation_speed 来控制动画速度

3.结果保存:

  • 将抽奖结果保存为 JSON 格式
  • 包含抽奖时间、参与人数、各奖项获奖者等信息
  • 文件名包含时间戳,保存在 results 目录下

上面都是我粘贴过来的,又是一行代码都没改。。

最后

这类工具市面上有很多,有网页端大屏操作的,也有桌面端的,很多是收费的,突然要找来用还是挺费时间的,比如下面这个:

今天我用AI工具实现的这个,虽然现在还是一个玩具,距离上面这种成熟抽奖产品还有一定距离,但是上面仅仅是我用5分钟写的,给我点时间,实现一个抽奖工具,应该没啥压力,毕竟左手chatgpt,右手Claude,效率杠杆的。

对了,需要这个成熟抽奖工具,可以私信回复【抽奖】或者扫下方二维码找到我,发给你。

欢迎链接,邀请你来我的AI交流群,一起探讨AI!

顶尖架构师栈
大厂架构师,专注科技资讯,AI前沿信息,日常分享技术干货,程序员副业,职场三两事。
 最新文章