[英]Python recursion return None but i explicitly set return
I was trying to make some exercise from Stepic and almost all tests done but i 我试图从Stepic做一些练习,并且几乎完成了所有测试,但我
I far as i know when we do recursion cycle we need explicitly set return. 据我所知,当我们执行递归循环时,我们需要显式设置return。 But in this case something get wrong. 但是在这种情况下,会出错。 This blow my mind for weeklong. 整整一个星期我都为之震惊。
initialDict = {}
def add(child, parent):
if child not in (initialDict):
initialDict.update({child: parent})
else:
initialDict[child].append(parent)
def heritage(parent, child):
if parent == child:
print('Yes')
elif child in initialDict and parent in initialDict[child]:
print('Yes')
elif child not in initialDict or parent not in initialDict[child]:
print('No')
else:
for i in range(len(initialDict[child])):
return heritage(initialDict[child][i], initialDict[child])
n = int(input())
for _ in range(n):
class_description = input().split()
class_name = class_description[0]
class_parents = class_description[2:]
add(class_name, class_parents)
q = int(input())
for _ in range(q):
question = input().split()
parent = question[0]
child = question[1]
print(heritage(parent, child))
We set:
4
A
B : A
C : A
D : B C
4
A B
B D
C D
D A
Expected Result: 预期结果:
Yes
Yes
Yes
No
Actual Result: 实际结果:
Yes
None
Yes
None
Yes
None
No
None
Make the loop: 进行循环:
for _ in range(q):
question = input().split()
parent = question[0]
child = question[1]
heritage(parent, child)
Since heritage
function contains print
s, while print(print(..))
would give an extra None
since print
is actually None
. 由于heritage
函数包含print
,而print(print(..))
会给出一个额外的None
因为print
实际上是None
。
If you dont specify return, its by default None. 如果不指定return,则默认为None。
1) you return string and print the result: 1)您返回字符串并打印结果:
def heritage(parent, child):
if parent == child:
return 'Yes'
elif child in initialDict and parent in initialDict[child]:
return 'Yes'
elif child not in initialDict or parent not in initialDict[child]:
return 'No'
else:
for i in range(len(initialDict[child])):
return heritage(initialDict[child][i], initialDict[child])
...
for _ in range(q):
question = input().split()
parent = question[0]
child = question[1]
print(heritage(parent, child))
...
2) or you print inside function, but you dont print result of the function, as the result is None 2)或者您在函数内部打印,但是您不打印函数结果,因为结果为None
for _ in range(q):
question = input().split()
parent = question[0]
child = question[1]
heritage(parent, child) # You return None, but you dont print it
def func_None():
print('yes')
print(func_None())
>>>
yes # this is printed inside function
None # this is printed result, because by default every function returns None if not specified
def func_not_None():
return 'yes'
print(func_not_None())
>>>
yes
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.