在Pyschool递归练习中,有一个问题是打印两个参数之间的数字(包括那些)...我在递归时太弱了,但经过一定的尝试,我做到了这一点..但它仍然会抛出虽然预期结果和返回结果完全相同但是错误。
def numbersInbetween(a, b):
if b == 0:
return "Invalid"
if a == b:
return a
else:
return str(a)+ "," + str(numbersInbetween(a+1, b))
输出图像文件:
我甚至试过,在第二个if
语句中对输出进行字符串格式化,但这只会引发错误,例如"检查代码中的无限循环"。
答案 0 :(得分:3)
您在a
时返回a == b
,而不是str(a)
。测试人员需要一个字符串,而是给它一个整数。
你可能 想要测试b
小于而不是a
,否则你最终会无休止地递归(好吧,直到你达到递归限制):
if b < a:
return "Invalid"
如果b = 0
,该功能仍然有效提供的a
小于或等于b
。 numbersInbetween(5, 0)
返回"Invalid"
不是因为b
是0
,而是因为b
小于a
;在这种情况下,当您增加a == b
时,您永远不会达到a
。
确保您的函数始终返回一个字符串实际上简化了您的代码:
def numbersInbetween(a, b):
if b < a:
return "Invalid"
if a == b:
return str(a)
else:
return str(a) + "," + numbersInbetween(a + 1, b)
答案 1 :(得分:0)
将行如果 b == 0更改为,如果 b&lt; 0 或 b == 0
def numbersInbetween(a, b):
if b < a or b == 0:
return "Invalid"
if a == b:
return str(a)
else:
return str(a) + ',' + numbersInbetween(a+1, b)