嘿,伙计们,我不想做任何恶意的事,我只是需要做些功课。我是一个相当新的程序员,我正在使用python3.0,我很难使用递归来解决问题。我在这个问题上纠结了好一阵子。这是
编写一个递归方法spam(url,n),该方法以网页的url为输入,非负整数n,收集网页中包含的所有电子邮件地址,并将它们添加到全局字典变量spam_dict中,然后在网页中包含的每个http链接上递归地调用自己。
您将使用字典,因此每个电子邮件地址只保存一个副本;您的字典将存储(键、值)对(电子邮件、电子邮件)。递归调用应使用参数n-1而不是n。如果n=0,则应收集电子邮件地址,但不应进行递归调用。参数n用于将递归限制为最多深度n。
您将需要使用上述两个问题的解决方案;您的方法spam()将调用方法links2()和emails()以及可能的其他函数。在
>>> spam_dict = {}
>>> spam('http://reed.cs.depaul.edu/lperkovic/csc242/test1.html',0)
>>> spam_dict.keys()
dict_keys([])
>>> spam_dict = {}
>>> spam('http://reed.cs.depaul.edu/lperkovic/csc242/test1.html',1)
>>> spam_dict.keys()
dict_keys(['lperkovic@cs.depaul.edu', 'nobody@xyz.com'])
到目前为止,我已经编写了一个函数,它遍历网页并将所有链接放入一个漂亮的小列表中,我想做的是调用该函数。为什么我要在字典上使用递归呢?怎么办?我不明白这一切是怎么联系在一起的。在
^{pr2}$任何输入(除了为什么垃圾邮件是坏的)将不胜感激。如果我能更好地理解以上的功能,我也可以这么做。然而,我所需要的是让程序产生正确的输出。在
我编写了一个从页面收集电子邮件的函数,但我不知道如何将.com、edu和.org放在一起。在
from re import findall
def emails(url):
links = str(links3(url))
# how do I construct pattern?
pattern='[A-Za-z0-9_.]+\@[A-Za-z0-9_.]+.com\.edu\.org
lst = findall(pattern,links)
print(lst)
我怎么告诉python?我在文件里找不到。在
想想递归是如何工作的。你想要的是你的函数在某些情况下能够调用它自己。在这种情况下,您需要为您的函数添加递归级别的参数,然后您需要确定它在各种情况下应该做什么?在
在最基本的层面上,它应该如何处理n=0?(提示:你已经准备好了)
如果n=1,它应该怎么做?您可能希望在n=0的现有列表的每个元素上再次调用函数。在
如果n大于1呢?您需要再次调用函数,对到目前为止得到的每个元素使用n=n-1。在
正如问题所述,
n
将通过将递归限制到最大“调用深度”来发挥作用。在这样做的想法是,由于您递归地调用扫描已在运行的扫描中的电子邮件,所以您将构建一个调用堆栈,该堆栈将在您继续递归调用扫描程序时变得越来越深。在
你不希望它永远持续下去,所以作为一个参数,你传递一个整数,你每次调用时都要递减。当它达到0时,您将停止执行递归调用,并让递归序列自行展开。在
相关问题 更多 >
编程相关推荐