首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

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

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

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

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

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

4.展示抽奖过程和结果

二、为什么选择Python?

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

三、设计摇奖程序

数据准备:参与人员名单

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

import random

# 假设这是我们从某处获取到的参与人员名单

participants = [

"张三", "李四", "王五", "赵六", "孙七",

"周八", "钱九", "孙十", "李十一", "张十二"

]

摇奖功能:随机抽取

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

def draw_lottery(participants, num_winners=1):

winners = random.sample(participants, num_winners)

return winners

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

摇奖流程控制

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

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函数能完成多个奖项的摇奖,每个奖项可以设置不同的中奖人数,并确保每个参与者只能中奖一次。

输出结果

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

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!

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OzBfmIDa7r14E6sX1Q_GBEDQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券