通过电子邮件指派一个秘密圣诞老人

santa的Python项目详细描述


一个python项目,根据一组约束条件,将秘密圣诞礼物和收件人随机配对,然后发送电子邮件 他们,都没有接线员看到作业。

要求

  • 雅戈尔邮件

安装

使用pip3 install santapython3 -m pip install santa安装。在任一命令前面加上sudo如果 由于权限不足而失败。

用法

  1. 为所有参与者创建个人对象及其姓名和地址:
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')
  1. 将它们放入列表:
people=[john,sally,linus,guido]
  1. 如果参与者对他们能给谁施舍有限制(比如说,约翰和莎莉已经结婚了,并且将要得到 不考虑对方的礼物),创建一个字典,以送礼者为键,列表中被禁止的接收者为 数值:
# not only are John and Sally married, but Sally hates Linus and will not get him a gift.restrictions={john:[sally],sally:[john,linus]}
  1. 将它们传递到函数santa.run(person_list, invalid_links=None, *, message='',subject='Secret Santa')。 这将匹配人并发送电子邮件。如果找不到匹配项,程序将引发santa.SolvingError。如果 您还没有configured yagmail,它将提示您输入用户名和密码。
santa.run(people,restrictions,message='Thank you for participating.')
  1. 如果发送电子邮件有任何错误,它们将以元组列表的形式打印到控制台 (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'

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误