[英]after giving a condition for my loop to stop it continues. the print statement works, but the code continues running
[英]Python function continues running after return statement?
以下 function 以 TypeError 结尾:Unsupported operand types float and NoneType。 基本案例如何触发return None
并且程序继续使用factorial() = None
。 至少我是这样认为的。
def factorial(i):
if i < 0:
return None # Why does the program not stop here?...
if i == 0:
return 1
return i * factorial(i-1) #factorial(i-1) returns None after i < 0?
print(factorial(3.01))
您收到该错误是因为在您的 function 中调用了return i * factorial(i-1)
,而factorial(i-1)
的计算结果为None
。
它评估为None
的原因是您提供的输入值 - 3.01
- 这将导致以下结果:
factorial(3.01) # returns 3.01 * factorial(3.01-1)
factorial(2.01) # returns 2.01 * factorial(2.01-1)
factorial(1.01) # returns 1.01 * factorial(1.01-1)
factorial(0.01) # returns 0.01 * factorial(0.01-1)
factorial(-0.99) # returns None (because i < 0)
因此,运行0.01 * None
行,这会导致您的错误。
function 中的最后一次递归调用是
return 0.01 * factorial(-0.99)
factorial(-0.99)
调用if i < 0:
案例,因此它返回None
。 然后上面的代码试图乘以0.01 * None
,这会导致你得到的错误。
您对factorial
的定义仅对非负整数有效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.