[英]How to Get My Recursive Function to Return 0 in Python
对于我的递归赋值,我们允许使用的唯一内置函数是len()
和'print()'。 所以,甚至不允许使用int()
。 我应该做的功能是打破一个数字并打印出数字中的每个数字。 所以,
>>breakApart(757890)
7
5
7
8
9
0
这是我到目前为止所提出的,
def breakApart(number):
c=0
while number//10**c>=10:
c+=1
integer_part=((number-(number%10**c))//(10**c))
if number//10**c==0:
return
elif number//10**c>0:
print(integer_part)
return breakApart(number%10**c)
这适用于所有数字,但不会打印出0。 我在考虑写一些东西,
if (number%10**c)>+10 and (number%10**c)//(10**(c-1))<1:
print(0)
return breakApart(number%10**c)
但如果连续0,则不会打印所有这些。 我想我可以像开头那样使用另一个计数器,但是如果有人能想到让我接近这个问题的方法,请告诉我。
在这里使用递归对您有利,在递归调用之后进行print
调用:
In [1]: def tell_digits(n):
...: rest, first = n // 10, n % 10
...: if rest:
...: tell_digits(rest)
...: print(first)
...:
In [2]: tell_digits(757890)
7
5
7
8
9
0
注意如果我在递归调用之前放置print
调用会发生什么:
In [3]: def tell_digits(n):
...: rest, first = n // 10, n % 10
...: print(first)
...: if rest:
...: tell_digits(rest)
...:
In [4]: tell_digits(757890)
0
9
8
7
5
7
如果number可以是一个字符串:
def breakApart(number):
if len(number) == 0:
return
else:
print(number[0])
breakApart(number[1:])
或者反过来:
def breakApart(number):
if len(number) == 0:
return
else:
breakApart(number[:-1])
print (number[-1])
什么能让你夜不能寐:
>>> def breakApart(number):
... return number > 9 and breakApart(number // 10) or print(number % 10)
...
>>> breakApart(757890)
7
5
7
8
9
0
>>>
当然,Python 3具体。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.