我进行了搜索,但找不到任何相关内容。因此,这里有一些有效的代码,它为每个人选择了一个“秘密圣诞老人”,而不是他们自己或他们的伴侣。问题在于,代码有时最终会选择名称,因此有时无法完成(您可能必须尝试几次)。我的问题是,有没有办法编写代码以便每次都能完成?
import sys
import copy
import random
names = ['Rachel', 'Ross', 'Joey', 'Phoebe', 'Monica', 'Chandler']
partner = ['Ross', 'Rachel', 'Phoebe', 'Joey', 'Chandler', 'Monica']
def secretsanta(names, partner):
my_list = names
part = partner
choose = copy.copy(my_list)
result = []
while True:
try:
for i in range(len(my_list)):
namees = copy.copy(my_list)
par = copy.copy(part)
namees.pop(i)
par.pop(i)
chosen = random.choice(list(set(choose) & set(namees) & set(par)))
result.append((my_list[i], chosen))
choose.pop(choose.index(chosen))
return result
except IndexError:
print("Couldn't complete the code, try again.")
sys.exit(1)
if __name__ == '__main__':
print(secretsanta(names, partner))
我读了一些书,据我了解,它要么是图遍历问题,要么是匹配问题。这是否意味着有更好的解决方法?