不会选择您或您的伴侣的秘密圣诞老人

时间:2019-11-29 09:08:27

标签: matching graph-traversal

我进行了搜索,但找不到任何相关内容。因此,这里有一些有效的代码,它为每个人选择了一个“秘密圣诞老人”,而不是他们自己或他们的伴侣。问题在于,代码有时最终会选择名称,因此有时无法完成(您可能必须尝试几次)。我的问题是,有没有办法编写代码以便每次都能完成?

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))

我读了一些书,据我了解,它要么是图遍历问题,要么是匹配问题。这是否意味着有更好的解决方法?

0 个答案:

没有答案