当前位置: 首页 > 知识库问答 >
问题:

秘密圣诞老人计划

越宣
2023-03-14

我们被要求创建一个程序,可以用于游戏"秘密圣诞老人":

from random import *
people=[]
while True:
    person=input("Enter a person participating.(end to exit):\n")
    if person=="end": break
    people.append(person)


shuffle(people)
for i in range(len(people)//2):
    print(people[0],"buys for",people[1])

这是我开发的程序。到目前为止,如果我输入3个人(例如Bob、Ben、Bill),它将返回“Ben为Bill购买”,而没有人为Ben或Bob购买。我目前正试图让它输出“Bob为Ben买东西,Ben为Bill买东西,Bill为Bob买东西”,但到目前为止还没有成功。如果有人能给我一个提示/设置这个的基础,我将不胜感激。另外,如果我的代码中有任何错误不允许我完成这项工作,你能告诉我吗?谢谢

共有3个答案

华振
2023-03-14

假设你有三个人:['Bob','Ben','Bill']。

In [1]: people = ['Bob', 'Ben', 'Bill']

现在,当你得到这个列表的长度时,你正在做地板除以2。这导致:

In [2]: len(people) // 2
Out[2]: 1

这就是为什么你只能得到一行输出。

你怎样才能得到你想要的秘密圣诞老人?以下是一些实现此功能的简单方法提示:

  • 你需要某种方法来确保两个人不会被分配给同一个人,一个人也不会被分配给他或她自己。
申屠秦斩
2023-03-14

您正在为0和1编制索引,因此打印的始终是第一个人和第二个人。你真正想要的是:

shuffle(people)
offset = [people[-1]] + people[:-1]
for santa, receiver in zip(people, offset):
     print(santa, "buys for", receiver)
秦时铭
2023-03-14

第一个提示是,在for循环中使用0和1之类的常量而不是i是没有意义的。

for i in range(len(people)):
    print(people[i],"buys for",people[(i+1)%(len(people))])

然而,这个实现不会给你秘密圣诞老人提供的所有可能性。

假设您输入“Alice”、“Bob”、“Claire”、“David”,您将永远不会遇到以下情况:

  • 爱丽丝为鲍勃买东西

您将只得到循环排列,即:

  • 爱丽丝为鲍勃买东西
  • 鲍勃给克莱尔买的
  • 克莱尔给大卫买的
  • 大卫给艾丽丝买的

诸如此类。

你需要做一些额外的工作来制作一个完美的秘密圣诞老人:)

 类似资料:
  • 我想用js制作一个小脚本,有一个用户列表,一个用户必须向另一个用户赠送礼物。 通过应用以下约束: > 如果“a”是圣诞老人,给“c”送礼物,那就不能反过来了。所以“c”不可能是“a”的圣诞老人。 它必须同时处理偶数和奇数用户。 在你看来,什么是正确的方法来尽量减少比较的数量,也就是说,加快脚本的速度。 我本来想这样开始,但后来我不知道该怎么做:

  • 我决定制作一个程序,根据硬编码限制(例如,某人不能得到他的妻子)生成秘密圣诞老人配对。我的家人都很忙,所以很难组织每个人随机画帽子。 我的程序崩溃seldomly,因为不幸的随机配对使剩余的不合法(然而,我抓住他们在测试脚本部分)。把它想象成一个重新绘制的人。 然而,当我的程序成功时,我知道配对是正确的,而不必亲自查看它们,因为我的程序测试有效性。明天,我将不得不找到一种方法,使用配对从我的电子邮

  • 我正在做一个程序,它将模拟秘密圣诞老人的分类帽。我试图让程序有一个错误陷阱,以防止人们获得自己的名字,但我无法让程序在有人获得自己的名字时选择一个新的名字。我遇到的另一个问题是,程序一直过早退出。 这是我的代码:

  • 我想做一个秘密圣诞老人节目。理想情况下,程序应该要求至少三个名字,然后程序会询问是否有更多的名字。如果是,打开另一个文本字段并将其添加到名称列表中。如果没有,打破循环,创建一个单独的列表,其中包含名称,打乱第二个名称列表,并将它们与原始列表中的名称配对。 例如,如果John、Elliot、Sarah和Jenny输入了他们的名字,程序将他们的名字打乱,它应该输出这样的内容: 但我得到的是: 代码如下

  • 本文向大家介绍java 实现简单圣诞树的示例代码(圣诞节快乐),包括了java 实现简单圣诞树的示例代码(圣诞节快乐)的使用技巧和注意事项,需要的朋友参考一下 代码如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍C语言设计一个闪闪的圣诞树,包括了C语言设计一个闪闪的圣诞树的使用技巧和注意事项,需要的朋友参考一下 控制台打印一个圣诞树:简简单单的C语言知识,真的很基础,小白也能看得懂哦 最终的效果图 也没有那么高大上的啦,就很简单的,效果的话是动态的,可以闪动的呢。 如果大家看以上代码不过瘾,大家可以参考下这篇文章。 使用C语言编写圣诞表白程序 以上所述是小编给大家介绍的C语言设计一个闪闪的圣