繁体   English   中英

如何让我的递归函数在Python中返回0

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM