通过电子邮件指派一个秘密圣诞老人
santa的Python项目详细描述
一个python项目,根据一组约束条件,将秘密圣诞礼物和收件人随机配对,然后发送电子邮件 他们,都没有接线员看到作业。
要求
- 雅戈尔邮件
安装
使用pip3 install santa或python3 -m pip install santa安装。在任一命令前面加上sudo如果 由于权限不足而失败。
用法
- 为所有参与者创建个人对象及其姓名和地址:
importsantajohn=santa.Person('John Doe','jdoe@example.com')sally=santa.Person('Sally Salamander','sally@mander.com')linus=santa.Person('Linus Torvalds','torvalds@transmeta.com')guido=santa.Person('Guido van Rossum','guido@python.org')
- 将它们放入列表:
people=[john,sally,linus,guido]
- 如果参与者对他们能给谁施舍有限制(比如说,约翰和莎莉已经结婚了,并且将要得到 不考虑对方的礼物),创建一个字典,以送礼者为键,列表中被禁止的接收者为 数值:
# not only are John and Sally married, but Sally hates Linus and will not get him a gift.restrictions={john:[sally],sally:[john,linus]}
- 将它们传递到函数santa.run(person_list, invalid_links=None, *, message='',subject='Secret Santa')。 这将匹配人并发送电子邮件。如果找不到匹配项,程序将引发santa.SolvingError。如果 您还没有configured yagmail,它将提示您输入用户名和密码。
santa.run(people,restrictions,message='Thank you for participating.')
- 如果发送电子邮件有任何错误,它们将以元组列表的形式打印到控制台 (gifter, recipient)。你,接线员,必须决定如何处理这个问题。
选项
默认情况下,圣诞老人将使用'loop'策略解决问题,这将产生一个“礼物循环”。 圣诞老人也可以用方法'draw'来解决这个问题,该方法模拟从帽子中提取门票。这种方法不会 必然会导致一个循环,但可能会发生两个礼物给对方的“对”。
要设置解决模式,请将其传递到santa.run(),如下所示:
santa.run(people,restrictions,solve_mode='loop')
当前的解决模式列表如下:
- 'loop'(默认值)
- 'draw'
圣诞老人也有输出模式的选择。默认情况下,它将向收件人发送电子邮件。但从0.2版开始,它也有 选项将输出保存到当前工作目录中的文本文件。这些可以附加到电子邮件并发送 不需要操作员知道谁被分配给谁。
要设置输出模式,请将其传入santa.run(),如下所示:
santa.run(people,restrictions,out_mode='text')
当前输出模式列表如下:
- 'email'(默认值)
- 'text'