为什么这个Python脚本偶尔会递归?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了为什么这个Python脚本偶尔会递归?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1717字,纯文字阅读大概需要3分钟。
内容图文
![为什么这个Python脚本偶尔会递归?](/upload/InfoBanner/zyjiaocheng/749/e86f107550174da292312c35fd44b392.jpg)
我正在教自己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
感谢您的任何帮助.
解决方法:
首先让我们考虑一下女性.如果您的程序运行并且将Jane与Jill匹配,那么将Jill与Jane匹配,Jane是唯一的女性,因为她无法匹配自己,您的程序无限期地运行而没有匹配.
让我提出另一种方法来解决您的问题.随机地改变你的送礼者/收据的顺序,并让每个人在列表中给下面的人送礼物,并让列表中的最后一个人送给第一个人.这看起来像这样:
from random import shuffle
women = ['Jane', 'Jill', 'Jade']
shuffle(women)
print women[-1] + ' to ' + women[0]
for i in range(len(women) - 1):
print women[i] + ' to ' + women[i+1]
内容总结
以上是互联网集市为您收集整理的为什么这个Python脚本偶尔会递归?全部内容,希望文章能够帮你解决为什么这个Python脚本偶尔会递归?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。