我想做一个秘密圣诞老人节目。理想情况下,程序应该要求至少三个名字,然后程序会询问是否有更多的名字。如果是,打开另一个文本字段并将其添加到名称列表中。如果没有,打破循环,创建一个单独的列表,其中包含名称,打乱第二个名称列表,并将它们与原始列表中的名称配对。
例如,如果John、Elliot、Sarah和Jenny输入了他们的名字,程序将他们的名字打乱,它应该输出这样的内容:
[('John', 'Sarah'), ('Elliot', 'John'), ('Sarah', 'Jenny'), ('Jenny', 'Elliot')]
但我得到的是:
[('John', 'John'), ('Elliot', 'John'), ('Sarah', 'Elliot'), ('Jenny', 'Jenny')]
代码如下:
import sys
import random
names = []
class Santa:
#The class that takes the values, shuffles them, pairs and then displays them
def __init__(self, name):
self.turns = name
self.people = names
self.final = []
def sort_names(self):
random.shuffle(self.people)
for name in self.turns:
pair = (name, random.choice(self.people))
if pair[0] == [1]:
pair = (name, random.choice(self.people))
else:
self.final.append(pair)
def print_name(self):
input("\nNames are ready! Press Enter to show the names.")
print(self.final)
def main():
# The function asking for user input
name = input("\nType in your name. ")
names.append(name)
name = input("\nType in the next name. ")
names.append(name)
name = input("\nType in the next name. ")
names.append(name)
while True:
next = input("\nIs this everyone? Y/N ")
if next.upper() == "Y":
break
elif next.upper() == "N":
name = input("\nType in the next name. ")
names.insert(0, name)
else:
print("\nInvalid response, please try again.")
print(names)
start = Santa(names)
start.sort_names()
start.print_name()
input("\nRecord these, and press enter to quit.")
sys.exit()
main()
for name in self.turns:
pair = (name, random.choice(self.people))
# you compare against [1] ? That is a list containing a 1 as only thing
# and it will never be True unless if you compare string vs. name
if pair[0] == [1]:
pair = (name, random.choice(self.people))
else:
self.final.append(pair)
您可以简化您的循环,并且在配对人员时必须处理奇数/偶数个名称。使用列表切片和压缩使得配对更容易。
例子:
import sys
import random
class Santa:
def __init__(self, names):
self.people = names
def shuffle(self):
random.shuffle(self.people)
self.final = []
if len(self.people) < 2:
print("Sorry, not enough people to gift stuff around")
return
# taken from the comment, because superior to what I had originally
# see edit history for my solution ;o) - this one suggested by @Matthias
self.final = [(n1, n2) for n1, n2 in zip(names, names[1:] + [names[0]])]
def print_name(self):
print(self.final)
name = "dummy"
names = []
while name:
name = input(f"Whats the {len(names)+1}. name? (Empty to end) ").strip()
if not name:
break
names.append(name)
print(names)
santa = Santa(names)
santa.shuffle()
santa.print_name()
输出(省略输入输出):
# odd inputs
['Tim', 'John', 'Luise', 'Maria', 'Wasja']
[('Wasja', 'Maria'), ('Maria', 'John'), ('Luise', 'Tim')]
['Tim', 'John', 'Luise', 'Maria', 'Wasja']
[('Maria', 'Wasja'), ('Wasja', 'Tim'), ('John', 'Luise')]
# even inputs
['Tim', 'John', 'Luise', 'Maria']
[('John', 'Tim'), ('Maria', 'Luise')]
['Tim', 'John', 'Luise', 'Maria']
[('Luise', 'Tim'), ('John', 'Maria')]
您可以在此处阅读有关zip和列表切片的更多信息:
您不需要整个类来设置这个,我已经尝试清理了一些阅读输入。
import random
names = []
for _ in range(3):
name = input("\nType in your name. ")
names.append(name)
while True:
next = input("\nIs this everyone? Y/N ")
if next.upper() == "Y":
break
elif next.upper() == "N":
name = input("\nType in the next name. ")
names.insert(0, name)
else:
print("\nInvalid response, please try again.")
print(names)
random.shuffle(names)
pairs = [(first_person, second_person) for first_person, second_person in zip(names, names[1:] + [names[0]])]
print(pairs)
我们被要求创建一个程序,可以用于游戏"秘密圣诞老人": 这是我开发的程序。到目前为止,如果我输入3个人(例如Bob、Ben、Bill),它将返回“Ben为Bill购买”,而没有人为Ben或Bob购买。我目前正试图让它输出“Bob为Ben买东西,Ben为Bill买东西,Bill为Bob买东西”,但到目前为止还没有成功。如果有人能给我一个提示/设置这个的基础,我将不胜感激。另外,如果我的代码中有任何错
我想用js制作一个小脚本,有一个用户列表,一个用户必须向另一个用户赠送礼物。 通过应用以下约束: > 如果“a”是圣诞老人,给“c”送礼物,那就不能反过来了。所以“c”不可能是“a”的圣诞老人。 它必须同时处理偶数和奇数用户。 在你看来,什么是正确的方法来尽量减少比较的数量,也就是说,加快脚本的速度。 我本来想这样开始,但后来我不知道该怎么做:
问题内容: 我希望用户输入时间,例如12:00,但是我需要弄清楚一些事情,我实在是太可惜了。 我可以将文字限制为5个字符吗? 我可以在代码中嵌入冒号,以便用户无法删除它吗? 最后,我可以接受该代码并验证它只是数字(当然忽略了冒号) 问题答案: 答案是使用JFormattedTextField和MaskFormatter。 例如: Java编译器将要求您在创建MaskFormatter时捕获或抛出P
我决定制作一个程序,根据硬编码限制(例如,某人不能得到他的妻子)生成秘密圣诞老人配对。我的家人都很忙,所以很难组织每个人随机画帽子。 我的程序崩溃seldomly,因为不幸的随机配对使剩余的不合法(然而,我抓住他们在测试脚本部分)。把它想象成一个重新绘制的人。 然而,当我的程序成功时,我知道配对是正确的,而不必亲自查看它们,因为我的程序测试有效性。明天,我将不得不找到一种方法,使用配对从我的电子邮
我正在做一个程序,它将模拟秘密圣诞老人的分类帽。我试图让程序有一个错误陷阱,以防止人们获得自己的名字,但我无法让程序在有人获得自己的名字时选择一个新的名字。我遇到的另一个问题是,程序一直过早退出。 这是我的代码: