所有.我是一个非常非常新的程序员.我目前选择的语言是Python,我觉得我对它有一种体面的感觉.我刚刚开始学习递归.(顺便说一句,如果有人可以推荐一个好的指南,请告诉我!)大家都知道,这个问题非常基础,我发布的代码非常可怕,非常错误.
无论如何,我正在尝试编写一个能够让所有朋友都达到指定程度的函数.如果我把0作为学位,我只想要自己.如果我通过它1,我想要我和我所有的朋友.2,我想要我,我的朋友和他们所有的朋友,等等.
我尝试了很多不同的方法,但都没有用.我试图想象它应该如何在理论上起作用,而我也不能完全理解它,因为我在这方面缺乏经验.也许这里有一个善良的灵魂可以告诉我这段代码失败的所有方法,然后解释如何正确地做和/或推荐一个关于这个主题的好指南.开始:
def getFriends(self,degree,friendList):
if degree == 0:
friendList.append(self)
return friendList
else:
friendList = friendList.append(self)
for each in self.friends:
each.getFriends(degree-1,friendList)
Run Code Online (Sandbox Code Playgroud)
它不起作用,我知道我做了愚蠢的,愚蠢的事情.有人请打我,指出我正确的方向!
谢谢.
Ale*_*lli 14
friendList = friendList.append(self)
Run Code Online (Sandbox Code Playgroud)
这无条件地设置friendList为None任何列表append方法的不变返回值- 所以,先解决这个奇怪的问题......! - )
一旦你修复了这个问题,你仍然需要修复这个函数,以便它总是以return某种东西结束- "从结尾掉下来"返回None.例如:
def getFriends(self,degree, friendList):
if degree == 0:
friendList.append(self)
return friendList
else:
friendList.append(self)
for each in self.friends:
each.getFriends(degree-1, friendList)
return friendList
Run Code Online (Sandbox Code Playgroud)
可以而且显然应该重构以消除重复(干,不要重复自己,是编程的核心......):
def getFriends(self,degree, friendList):
friendList.append(self)
if degree > 0:
for each in self.friends:
each.getFriends(degree-1, friendList)
return friendList
Run Code Online (Sandbox Code Playgroud)
PS:那个(alist=alist.append(...)问题)正是我在2002年与我的妻子安娜重新取得联系的方式(我们多年前一直不是很甜心的朋友,但彼此已经失去了联系) - 她开始学习Python,用过正是这个错误的构造,无法理解它失败的原因 - 环顾Python社区,看到并认出了我的名字,邮寄我询问它......不到两年后我们结婚了,不久之后她就是第一个Python软件基金会的女性成员和我在"Python Cookbook"第2版的合着者.所以,当然,对于这个特定的Python错误,我有一个令人难以置信的最佳点... ;-).
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |