我在自學Python,寫了一個小腳本來交換聖誕禮物(這不是家庭作業)。我的家人喜歡每個人給同一個性別的人送一份禮物。以下腳本大部分時間都適用,但有時會通過無限遞歸失敗。我不知道爲什麼,因爲我認爲基本案例最終會得到滿足。這個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)
這是錯誤(編輯添加的完整的錯誤):
Traceback (most recent call last):
File "C:\...\christmasGifts.py", line 22, in <module>
print match(i)
File "C:\...\christmasGifts.py", line 18, in match
return match(giver)
...
File "C:\...\christmasGifts.py", line 18, in match
return match(giver)
File "C:\...\christmasGifts.py", line 9, in match
index = random.randrange(len(receivers))
File "C:\Python27\lib\random.py", line 184, in randrange
istart = int(start)
RuntimeError: maximum recursion depth exceeded while calling a Python object
感謝您的任何幫助。
似乎有一些錯誤信息丟失 –
什麼是錯誤 – FlavorScape
這ISN的回答,更多的建議:查找[Derangement](http://en.wikipedia.org/wiki/Derangement),因爲它很好地描述了你的問題,減去性別要求。 – Kevin