私は独学で 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
助けてくれてありがとう。