通过递归仅获取数字中的奇数

2024-09-30 08:37:52 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我的问题是,我有一个像123这样的数字,作为倾斜度,我希望结果是13

问题是,首先,我使用的方法是,我将得到一个倒数结果(例如31),其次,我在末尾得到一个不应该存在的零,而不是将数字相加,我不明白为什么。顺便说一句,我不能使用字符串

因此,为了澄清:

我的输出:

>>> apenas_digitos_impares(123)
40

正确输出:

>>> apenas_digitos_impares(123)
13

节目:

def apenas_digitos_impares(n):
    if n == 0:
        return 0
    elif (n%10)%2 == 0:
        return apenas_digitos_impares(n//10)
    elif (n%10)%2 == 1:
        return 10*(n%10) + apenas_digitos_impares(n//10)



Tags: 方法字符串returnifdef数字节目末尾
3条回答

我的意思是,如果python是您想要解决方案的地方,那么只需执行

Def pluck_even_digits(N):
    str_N = str(abs(N))

    for digit in [ 0, 2, 4, 6, 8]:
        str_N.replace( str(digit), “”)

    Return int(str_N)

它是python,您不局限于使用纯数学。此外,这种方式允许您轻松选择一个不是10的基,并从该新基的表示中提取值

看看最后一行的操作,如果它是奇数,则得到最后一个数字,然后将其乘以10,并将其添加到下一次调用的递归结果中,我相信这就是它不起作用的原因,请尝试下面的代码,这里您总是在末尾追加最后一个数字,以便最终的数字以正确的顺序出现

def apenas_digitos_impares(n):
    if n == 0:
        return 0
    elif (n % 10) % 2 == 0:
        return apenas_digitos_impares(n // 10)
    elif (n % 10) % 2 == 1:
        return 10 * apenas_digitos_impares(n // 10) + (n % 10)

你可以这样做-

def apenas_digitos_impares(n):
    if n == 0:
        return 0
    elif (n%10)%2 == 0:
        return apenas_digitos_impares(n//10)
    elif (n%10)%2 == 1:
        # Include the digit and recurse for remaining...
        return (n%10) + 10*apenas_digitos_impares(n//10)
        
print(apenas_digitos_impares(123))

输出:

13

代码所需的唯一更改是在函数的最后一行

  • 您将只包括奇数数字(由n%10完成)和

  • 继续(或递归)检查剩余的数字。您需要将下一个数字乘以10,所以-10*apenas_digitos_impares(n//10)

相关问题 更多 >

    热门问题