我正在自学Python,并编写了一个交换圣诞礼物的小脚本(这不是家庭作业)。我的家人喜欢每个人给同一性别的人一份礼物。下面的脚本大部分时间都可以工作,但有时由于无限递归而失败。我不知道为什么,因为我认为基本情况最终会得到满足。在
import random
family = {'Joe': 'm', 'Jane': 'f', 'John': 'm', 'Jill': 'f', 'James': 'm', 'Jade': 'f'}
receivers = family.copy()
givers = family.copy()
def match(giver):
index = random.randrange(len(receivers))
giverGender = givers[giver]
receiver = receivers.keys()[index]
receiverGender = receivers.values()[index]
if giver != receiver and giverGender == receiverGender:
del receivers[receiver]
return giver + ' to ' + receiver
else:
return match(giver)
# main program
for i in givers:
print match(i)
以下是错误(编辑以添加完整错误):
^{pr2}$谢谢你的帮助。在
下面是脚本的一个简单的迭代变体。效果很好。在
作为一个假设,我认为,根据概率论,有时你只是调用匹配函数太多次,所以它导致程序达到递归极限
首先让我们考虑一下女人。如果你的程序运行并且匹配了Jane和Jill,然后匹配了Jill和Jane,Jane是剩下的唯一一个女性,因为她不能匹配自己,你的程序将无限期地运行,没有匹配项。在
让我提出另一种方法来解决你的问题。随机改变送礼人/收礼人的顺序,让每个人送礼给列表中的下一个人,让列表中最后一个人作为第一个人送礼。看起来像这样:
简对吉尔,吉尔对简
玉给谁?在
相关问题 更多 >
编程相关推荐